繁体   English   中英

迭代器和多维向量?

[英]Iterators and multi-dimensional vectors?

因此,我正在尝试构建一个二维矢量,该矢量将包含用于从切片集中选择切片的索引。

一维的迭代器非常简单:

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() ,所以我想我的问题是,我搞砸了多少?

vec_it->begin()取消引用vec_it ,为您提供对vector<int>的引用,然后返回对其调用begin()的结果。 您不应该使用*取消引用该结果(这样做可以取消引用迭代器,从而产生该迭代器指向的元素,在这种情况下为int ;您需要迭代器本身)。

您的内部for循环应类似于:

for(inner_it = vec_it->begin(); inner_it != vec_it->end(); ++inner_it)

删除“ *”,您只是在分配迭代器,因此不需要取消引用。

for(inner_it = vec_it->begin(); inner_it != vec_it->end(); ++inner_it){

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM