std::vector<std::set<int>> m;
m[0].insert(0);
m[0].insert(1);
std::set<int> n = m[0]; // is this allowed?
for(std::set<int>::iterator iter = n.begin(); iter < n.end(); iter++) // error in this line, "<" not defined.
我可以通过直接复制来初始化集吗?最后一行有错误。
答案 0 :(得分:1)
我可以通过直接复制来初始化集吗?
来自cppreference:
从各种数据源构造新容器,并可以选择使用用户提供的分配器alloc或比较函数对象comp。
...
3)复制构造函数。 如果未提供alloc,则通过调用std :: allocator_traits :: select_on_container_copy_construction(other.get_allocator())获得分配器。
...
代码中的问题:您定义了一个不带任何元素的向量,并尝试将元素更改为0。
两种解决方案:
// Solution 1
std::vector<std::set<int>> m(1); // Define vector with one element
// Solution 2
std::vector<std::set<int>> m;
m.push_back(std::set<int>()); // Add new element to the vector with push_back
m.emplace_back(); // Add new element to the vector with emplace_back (recommended)
编辑:
对于最后一行,将<
更改为!=
:
for(std::set<int>::iterator iter = n.begin(); iter != n.end(); iter++)
答案 1 :(得分:0)
我可以通过直接复制来初始化集吗?
是
最后一行有错误
编写的forloop使用“ <”运算符比较iter
是否仍然小于集合中的最终迭代器。但是迭代器没有定义“ <”运算符。这会导致错误消息。请改用!=
。