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容器不需要默认可构造类型(某些方法可能需要它)。“但我不能,因为它本身不是默认可构造的。”默认可构造不是标准容器的要求由于您自己的答案,它与