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 中迭代器的生疏理解,已经很久了......

4

1 回答 1

5

it是 a vector<vector<int>>::iterator,应用后*你会得到 a 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);
    }
}

样品测试。

于 2012-11-16T06:15:00.000 回答