您的位置:首页 > 其它

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

2015-05-05 20:52 295 查看
标准库函数的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()函数返回地址的下一个低位地址上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  list end