2017-06-03 55 views
-3

我有一個使用矢量迭代第i行中向量的向量

vector< vector<int> > vvi; 

的矢量創建一個二維數組我可以遍歷這整個矢量與下面的迭代器:

std::vector< std::vector<int> >::iterator row; 
std::vector<int>::iterator col; 

for (row = vvi.begin(); row != vvi.end(); ++row) 
{ 
    for (col = row->begin(); col != row->end(); ++col) 
    { 
     std::cout << *col; 
    } 
} 

代替橫動的整個2D陣列,我需要像這樣遍歷任何第i行,但它不工作

std::vector< std::vector<int> >::iterator row; 
std::vector<int>::iterator col; 
row = vvi[i]; 
for (col = row->begin(); col != row->end(); col++) { 
     std::cout << *col;   
} 

我該如何解決這個問題問題。任何幫助將不勝感激!

+1

'auto&row = vvi [row_index];'然後'row.begin();'等。 – VTT

+0

我收到了一條錯誤消息。你難以理解這條消息嗎? –

+0

@VTT你的代碼和我的代碼有什麼不同?我想我正在做同樣的事情。 –

回答

1

在你的代碼中,row是一個迭代器,所以你不能將vvi[i]賦值給它。 在您的情況,這可以工作:

#include <iterator> 
// ... 
std::vector<std::vector<int> >::iterator row = vvi.begin(); 
std::advance(row, i); 

for (std::vector<int>::iterator col = row->begin(); col != row->end(); ++col) { 
    std::cout << *col << std::endl; 
} 

你也可以做一些簡單的像(以下C++ 11):

for (auto const& x : vvi[i]) { std::cout << x << std::endl; } 

如果你不希望使用範圍,用於語法,多了一個替代的解決方案可能是:

auto const& row = vvi[i]; 
for (auto col = row.cbegin(); col != row.cend(); ++col) 
{ 
    std::cout << *col << std::endl; 
} 

請注意,這裏我用cbegin()cend(),而不是begin()end()。 (如果您不確定這些差異,請對迭代器和const_iterators進行一些研究。)

最後一句:我在這兩個示例中都使用了增量運算符作爲前綴(++col)(就像您在第一個示例中那樣) :就你而言,不需要後綴版本提供的開銷。 (即使這是一個微妙的表現加上,這是沒有必要的。)

真的希望我能幫上忙。