list::end()地址相关问题

标准库函数的list数据结构中,一旦list建立,end()函数的地址就是固定的,无论向list中push_back()还是erase()。

而相应改变的是存放数据的地址。

例如:list<int> numbers;

cout<<*(numbers.end())<<endl;

const int n=5;
for(int i=0;i<n;i++){
numbers.push_back(i);
}
list<int>::iterator current=numbers.begin();
while(current!=numbers.end()){
cout<<*(current)<<" ";
current++;
}

cout<<"Size: "<<numbers.size()<<endl;  //输出为 "Size: 5"

list<int>::iterator pre=--current;
cout<<*(pre)<<endl;
current++;
cout<<*(current)<<endl;  //此时current(--,++)扔指向numbers,end()的地址
cout<<*(numbers.end())<<endl;
//
numbers.push_back(5);
cout<<"Size: "<<numbers.size()<<endl;  //输出为 "Size: 6"
cout<<*(--current)<<endl;  //输出为:5
cout<<*(numbers.end())<<endl;  //输出与上次相同


完整输出为:

1990332814

0 1 2 3 4
Size: 5
4
1990332814
1990332814
Size: 6
5
1990332814

由输出我们可以看出,end()函数所返回的地址不是list中最后项的地址。list的最后一项保存在end()函数返回地址的下一个低位地址上。

相关文章
相关标签/搜索