迭代包含向量的集合,而不使用任何基于范围的循环或对向量的引用
Iterate a set containing vectors without using any range based loops or reference to a vector
假设我有一个包含n个不同大小的向量的集合。我想在不使用任何基于范围的循环的情况下迭代它们。我该怎么做!
例如,这有效,但我在这里使用了基于范围的循环
set < vector <int> > fset;
for(auto it : fset)
{
for(auto itt : it)
cout << itt << " ";
cout << endl;
}
这也有效,但我使用 i 作为矢量引用并迭代索引明智
set < vector <int> > fset;
for(set < vector <int> > :: iterator it=fset.begin();it!=fset.end();++it)
{
const vector < int >& i = (*it);
int l = i.size();
for(int j=0; j<l; ++j)
cout << i[j] << " ";
cout << endl;
}
我想逐行显示集合中存在的所有矢量内容,但不使用上述任何方法。请帮帮我怎么做!谢谢!
需要 C++14(但也很容易转换为 C++11)
#include <iostream>
#include <ostream>
#include <iterator>
#include <set>
#include <vector>
int main() {
std::set<std::vector<int>> svec = {
{1,2,3},
{4,5,6}
};
std::for_each(std::begin(svec), std::end(svec),
[](const auto& vec) {
std::copy(std::begin(vec), std::end(vec),
std::ostream_iterator<int>(std::cout, " "));
std::cout << 'n';
});
return 0;
}
据我了解,这应该打印您的向量集:
set <vector <int> > data;
for (const auto& row : data)
{
for (int value : row)
cout << value << ", ";
cout << "n";
}
您可以轻松调整内部循环中矢量元素之间的格式,以及内部循环之前或之后行首或行尾所需的任何内容。
使用迭代器:
for (auto row_it = data.begin(); row_it != data.end(); ++row_it)
{
for (auto value_it = row_it->begin(); value_it != row_it->end(); ++value_it)
cout << *value_it << ", ";
cout << "n";
}
这两件事做完全相同的事情。ranged-for 仅通过添加类似
int value = *value_it;
在内部循环的开头。
希望这有帮助。
(哎呀。修正了拼写错误。
最终编辑
我猜如果你想避免auto
,你会坚持使用较旧的C++编译器(C++98 或 C++03,这基本上是一回事)。
要正确命名迭代器,您需要考虑它们所表示的类型。这里不明显的一点是,只看代码,你不能修改集合的值。因此,所有内部迭代器都必须const
。
但是,由于您只打印集合本身,因此您不妨显式使用const迭代器作为外部循环。
for (set <vector <int> > ::const_iterator row_it = data.begin(); row_it != data.end(); ++row_it)
{
for (vector <int> ::const_iterator value_it = row_it->begin(); value_it != row_it->end(); ++value_it)
cout << *value_it << ", ";
cout << "n";
}
希望有帮助。
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 布尔值向量的基于范围 for 循环
- 如何使用count_if计算向量中的可变数字范围
- 范围 v3 的和向量
- 关于在向量向量上使用基于范围的 for 循环
- 使用基于范围的指针循环和向量时出现C++错误
- 用基于范围的for循环填充指针向量
- 创建结构体向量,表达式:向量下标超出范围
- 代码超出范围.如何动态分配此向量?
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 非常量对象的向量似乎在基于范围的 for 循环中被视为常量
- 从给定范围内的向量中查找最大元素
- 向量向量的范围范围
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 在 c++ 中检查 if 条件中的向量位置范围
- 向量下标超出向量向量的范围
- 如何正确使用向量范围构造函数