Ful*_*igh 1 c++ iterator vector
是否有一种迭代多维向量的优雅方法?比方说,你有一个6D矢量,虽然我认为2D就足够了.就像是
vector< vector< int > myVector (6, vector<int> (5));
Run Code Online (Sandbox Code Playgroud)
有没有一种很好的方法来迭代这个,从myVector[0][0], myVector[0][1], ...etc??我在较大的维度上尝试它,并使用Auto关键字生成迭代器,但这并不好.这就是我的尝试:
for(auto it = myVector.begin(); it < myVector.end(); ++it)
std::cout << *it;
Run Code Online (Sandbox Code Playgroud)
但它没有编译.请原谅我对STL中迭代器的理解,这已经很久了......
it是一个vector<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;
Run Code Online (Sandbox Code Playgroud)
如果您有任意尺寸,则可以使用以下内容:
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);
}
}
Run Code Online (Sandbox Code Playgroud)