我代表一组数组,如下所示:
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";
}
但是我如何通过首先描述的方案实现相同的目标呢?我觉得我的想法太难了,而且我只能想出一些过于复杂的东西。有一些整洁的解决方案吗?
答案 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
告诉我们每行需要打印多少个元素。