c++ - 具有字符数组元素的结构的 STL 容器

标签 c++ c++11 vector stl

假设我的结构如下所示 -

struct Member
{
    Membe(char* member1In, char* member2In)
    {
       strcpy(member1, member1In);
       strcpy(member2, member2In);
    }
    char member1[10];
    char member2[10];
};

和 std::vector 声明为

std::vector<Member> members{};

然后我使用 emplace_back() 插入值,如下所示

members.emplace_back(value1, value2);

所以我的问题是当阵列超出容量时,它必须移动到其他位置。谁来为成员结构分配内存?我是否必须编写自己的复制、分配和移动操作或提供的编译器就足够了?默认提供的操作是否会进行浅拷贝并产生问题?

最佳答案

Who will allocate memory for Member structure ?

std::vector 将使用您提供的分配器分配内存(隐含地,通过使用默认参数)。

Do I have to write my own copy, assignment and move operations or compiler provided are enough ?

编译器提供的就够了。

Will default provided operation do shallow copy

是的,尽管这取决于浅拷贝的含义。浅拷贝和深拷贝的区别只对引用类型有意义。

and create problem ?

没有。您的类不包含指针/引用/迭代器,因此没有任何可以深度复制的内容,也没有问题。

关于c++ - 具有字符数组元素的结构的 STL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62575030/

相关文章:

c++ - 实现字符串的 C++ 运算符

c++ - C++11 中赋值列表和初始化列表之间缩小的差异

c++ - vector::iterator也可以用作 vector 吗

android - 在android中使用矢量资源作为应用程序图标

c++ - fedora 21 上的 gcc-c++-4.1.2(双)安装

c++ - 通过函数传递随机引擎 - 为什么不同的编译器表现不同

c++ - STL 集 : insert two million ordered numbers in the most efficient manner

c++ - 将对象传递给将创建它的函数时使用什么合适的智能指针

c++ - 有没有办法在声明时用缓冲区初始化数组?

c++ - 用于将文件中的字符串读入 3D 数组的 For 循环