【发布时间】:2017-08-14 03:51:51
【问题描述】:
我正在尝试在列表中使用迭代器,如下所示,这是正确的方法吗?
我有两个向量 v1 和 v2,我正在使用两个迭代器 it1 和 it2。后来,我使用list<vector<int>::iterator> 的列表来push_back 迭代器it1 和it2。这可行,但如果任何一个向量为空,它就会崩溃。
int main() {
vector<int> v1 ={1,2,3};
vector<int> v2 ={4,5,6,7};
vector<int>::iterator it1 = v1.begin();
vector<int>::iterator it2 = v2.begin();
list<vector<int>::iterator> l;
l.push_back(it1);
l.push_back(it2);
for(auto a : l){
vector<int>::iterator it = a;
while(*it){
cout<<*it<<endl;
it++;
}
}
return 0;
}
【问题讨论】:
-
这太疯狂了。为什么是迭代器向量,如果向量发生突变,它们会失效?此外,您没有捕获结束迭代器。这就是你应该知道你在向量末尾的方式,而不是
*it。如果列表为空begin == end并且您没有迭代,也不需要取消引用it。
标签: c++