所以,我正在尝试构建一个二维向量,该向量将保存用于从tileset中选择tile的索引。
一维迭代器很简单:
std::vector<int> vec;
std::vector<int>::iterator vec_it;
for(int i=5; i>0; --i){
vec.push_back(i); }
//prints "5 4 3 2 1 "
for(vec_it = vec.begin(); vec_it != vec.end(); ++vec_it){
std::cout<<*vec_it<<' ';
}
但是,添加第二维时遇到了麻烦。这是不的代码:
std::vector<std::vector<int> > vec(5);
std::vector<std::vector<int> >::iterator vec_it;
std::vector<int>::iterator inner_it;
for(int i=0; i<5; ++i){
vec[i].assign(5, 0);
}
for(vec_it = vec.begin(); vec_it != vec.end(); ++vec_it){
for(inner_it = *vec_it->begin(); inner_it != *vec_it->end(); ++inner_it){
std::cout<<*inner_it<<' ';
}
std::cout<<std::endl;
}
//should print:
//0 0 0 0 0
//0 0 0 0 0
//0 0 0 0 0
//0 0 0 0 0
//0 0 0 0 0
编译失败时出现了几乎难以理解的错误,我尝试inner_it = *vec_it->begin()
,所以我想我的问题是,我搞砸了多少?
答案 0 :(得分:6)
vec_it->begin()
取消引用vec_it
,为您提供vector<int>
的引用,然后返回调用begin()
的结果。你不应该使用*
取消引用它的结果(这样做取消引用迭代器,产生迭代器指向的元素,在这种情况下是int
;你想要迭代器本身)。
你的内部for循环应该如下:
for(inner_it = vec_it->begin(); inner_it != vec_it->end(); ++inner_it)
答案 1 :(得分:1)
删除'*',你只是分配迭代器,所以不需要取消引用int。
for(inner_it = vec_it->begin(); inner_it != vec_it->end(); ++inner_it){