2010-07-09 66 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){