C++ 可以通过复制来初始化集合吗? std::向量m; m[0]。插入(0); m[0]。插入(1); std::set n=m[0];//允许这样做吗? 对于(std::set::iterator iter=n.begin();iter

C++ 可以通过复制来初始化集合吗? std::向量m; m[0]。插入(0); m[0]。插入(1); std::set n=m[0];//允许这样做吗? 对于(std::set::iterator iter=n.begin();iter,c++,stl,C++,Stl,我可以通过直接复制来初始化集合吗 发件人: 从各种数据源构造新容器,并可选地使用用户提供的分配器alloc或比较函数对象comp.… 3) 复制构造函数。使用other内容的副本构造容器。如果未提供alloc,则通过调用std::allocator\u traits::select\u on_container\u Copy\u构造(other.get\u allocator())获取分配器。 … 代码中的问题是:您定义了一个没有任何元素的向量,并尝试在0处更改该元素。 两种解决方案: std:

我可以通过直接复制来初始化集合吗

发件人:

从各种数据源构造新容器,并可选地使用用户提供的分配器alloc或比较函数对象comp.

3) 复制构造函数。使用other内容的副本构造容器。如果未提供alloc,则通过调用std::allocator\u traits::select\u on_container\u Copy\u构造(other.get\u allocator())获取分配器。

代码中的问题是:您定义了一个没有任何元素的向量,并尝试在0处更改该元素。
两种解决方案:

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.
  • 我可以通过直接复制来初始化集合吗

  • 最后一行有错误


所写的forloop使用了“尝试时发生了什么?”?有错误吗?警告?它只是“不起作用”(如果不起作用,为什么不起作用)?文档(对于std::set)说了什么可能表明一种方式或另一种方式?我认为您想要使用
iter=n、 end()替代。如何循环一个未从向量内的容器中复制的集合?请使用
++iter
替代
iter++
。您关于复制分配的引用是错误的。该代码不(!)调用复制分配或移动分配运算符。
=
符号让人相信这一点,但由于表达式是初始化,因此我们遇到复制初始化:
// 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++)