2010-07-09 103 views
0

所以,我试图建立一个二维矢量,它将保存从瓷砖中选择瓷砖的索引。迭代器和多维向量?

在一名维迭代器是很简单:

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(),所以我想我的问题是,如何厉害为什么我搞砸了?

回答

6

vec_it->begin()解除引用vec_it,给你参考vector<int>然后返回调用begin()的结果。你不应该使用*(这样做取消引用迭代器,产生该迭代器指向的元素,在这种情况下为int;你需要迭代器本身)来解引用结果。

你内心的for循环应该是这样的:

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

嗯,我放心,这是一个简单的错误,至少。谢谢。 – SubIgnition 2010-07-09 20:43:37

1

删除“*”,你只是分配迭代器,所以不需要derefernce它。

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