C++ 包含引用的对象的STL容器
考虑以下代码:C++ 包含引用的对象的STL容器,c++,stl,C++,Stl,考虑以下代码: class C { public: C(int &a):_a(a){} private: int &_a; }; 由于对_a的引用,此对象不能作为值包含在STL容器中。 由于此引用,无法将默认构造函数添加到此类 有没有一种方法可以使这个对象适合STL容器而不改变对指针的引用 理想情况下,我想我应该为它使用某种std::reference_包装器,但我不能,因为它本身不是默认可构造的 有没有办法使这个对象适合STL容器 当然可以: std::vec
class C
{
public:
C(int &a):_a(a){}
private:
int &_a;
};
由于对_a的引用,此对象不能作为值包含在STL容器中。
由于此引用,无法将默认构造函数添加到此类
有没有一种方法可以使这个对象适合STL容器而不改变对指针的引用
理想情况下,我想我应该为它使用某种std::reference_包装器,但我不能,因为它本身不是默认可构造的 有没有办法使这个对象适合STL容器 当然可以:
std::vector<C> name_of_vector {
some_int, another_int, ...
};
std::向量的向量名称{
一些,另一个。。。
};
请注意,如果重新分配std::vector
,则隐式生成的C
赋值运算符的语义可能会产生意外的结果。即,赋值运算符修改引用的整数
我强烈建议将赋值运算符定义为已删除。更好的是,避免完全使用引用成员
理想情况下,我想我应该使用某种std::reference\u包装器
由于其赋值语义(它重新绑定而不是修改引用的对象),这可能是一个更合理的选择
但我不能,因为它本身不是默认可构造的
默认可构造性不是任何标准容器的元素的要求(尽管它是某些标准容器的某些成员函数的要求,因此仅限于不使用这些函数)。这不起作用的原因是我试图使用[]运算符插入无序的_映射 这就是编译器抱怨缺少默认构造函数的原因 我只是忘记了[]的意思是“查找或创建”,它的工作方式与insert不同。
使用insert解决了问题
任何容器
?STL容器不需要默认可构造类型(某些方法可能需要它)。“但我不能,因为它本身不是默认可构造的。”默认可构造不是标准容器的要求由于您自己的答案,它与