迭代一维数组集合

时间:2015-05-02 21:46:11

标签: c++ arrays

我代表一组数组,如下所示:

std::vector<int> v = {3, 0, 1, 2, 1, 3, 1, 4, 2, 5, 6 };

此数组表示由{0,1,2}{3}{4}{5,6}组成的4个数组的集合。所以v首先包含数组的大小,然后是数组内容。

我试图迭代数组,即逐步遍历每个数组的每个元素并以某种方式处理它们。如果这是一个矢量矢量,可以简单地做:

std::vector<std::vector<int> > v;
v.emplace_back(std::vector<int>({ 0, 1, 2 }));
v.emplace_back(std::vector<int>({ 3 }));
v.emplace_back(std::vector<int>({ 4 }));
v.emplace_back(std::vector<int>({ 5, 6 }));

for (std::size_t i = 0; i < v.size(); ++i)
{
    for (std::size_t j = 0; j < v[i].size(); ++j)
    {
        std::cout << v[i][j] << " ";
    }
    std::cout << "\n";
}

但是我如何通过首先描述的方案实现相同的目标呢?我觉得我的想法太难了,而且我只能想出一些过于复杂的东西。有一些整洁的解决方案吗?

2 个答案:

答案 0 :(得分:1)

假设你已经构造了矢量,试试迭代器!

std::vector<int>::iterator i = v.begin();
while(i != v.end()){
    size_t n = *i;
    for(size_t j = 0; j < n; j++)
        std::cout << *(++i) << " ";
    std::cout << std::endl;
    ++i;
}

答案 1 :(得分:1)

解决方案似乎没有2D矢量那么复杂:

std::vector<int>::iterator it = std::begin(v);

while (it != std::end(v)) {
    int n = *it;
    for (int j = 0; j < n; ++j) {
        ++it;
        std::cout << *it << ' ';
    }
    std::cout << '\n';
    ++it;
}

我们只是通过向量走it。变量n告诉我们每行需要打印多少个元素。