2012-11-16 69 views
1

是否有一個優雅的方法迭代通過多維向量?比如說,你有一個6D矢量,但我認爲2D就足夠了。喜歡的東西迭代通過多維向量(使用自動關鍵字?)

vector< vector<int> myVector (6, vector<int> (5)); 

是否有通過這個循環,從myVector[0][0], myVector[0][1], ...etc?起一個漂亮的方式嗎?我在更大的尺寸上嘗試它,並使用Auto關鍵字來生成一個迭代器,但它不好。這是我想要的:

for(auto it = myVector.begin(); it < myVector.end(); ++it) 
    std::cout << *it; 

但它不編譯。請原諒迭代我糟糕的理解STL,它是一個很長的時間......

+0

參見[這裏](HTTP://計算器.com/q/3623082/485561),也許這個答案可以被推廣到扁平任意(指定)數量的維度。 – Mankarse

回答

4

itvector<vector<int>>::iterator,並應用*後,你得到一個vector<int>,這是不能被打印出來。您需要循環迴路:

for(auto i1 = myVector.begin(); i1 != myVector.end(); ++i1) // loops over the "external" vector 
    for(auto i2 = i1->begin(); i2 != i1->end(); ++i2) // loops over the "internal" vectors 
     std::cout << *i2; 

如果你有任意尺寸,你可以使用以下命令:

template <typename T> 
void printVar(const T& v) 
{ 
    std::cout << v; 
} 

template <typename T> 
void printVar(const std::vector<T>& v) 
{ 
    for (auto i = v.cbegin(); i != v.cend(); ++i) 
    { 
     printVar(*i); 
    } 
} 

Sample test.

+0

這就是我所害怕的,以及我現在正在做的事情。我希望有一種方法可以做到這一點,而不需要爲每個額外的維度添加另一個循環= P – Fulluphigh

+0

你爲什麼這麼認爲?你迭代向量爲什麼你不會迭代另一個向量? –

+0

@JoshuaJefferies:我添加了代碼以允許您打印任意尺寸的矢量。 – Cornstalks