首先创建字符串,然后通过移动语义将其添加到 vector 或在 vector 中创建元素是否具有内存效率
Is it memory efficient to first create string and then add it to vector through move semantics or to create element in vector?
std::vector<std::string> v;
v.push_back("");
v[0] += 's';
v[0] += 't';
v[0] += 'r';
v.push_back("");
v[1] += 's';
v[1] += 't';
v[1] += 'r';
和
std::vector<std::string> v;
std::string s = "";
s += 's';
s += 't';
s += 'r';
std::string s1 = s;
v.push_back(std::move(s));
v.push_back(std::move(s1));
在第一种情况下,我们首先在向量中创建元素,然后对其进行修改。我想在这么小的情况下,首先会保留足够的内存,但如果不是 - 是向量v
内存连续的,还是只是指向字符串对象的指针?将元素添加到向量中的字符串元素是否会使最后一个执行内存重新分配?
在第二种情况下,是否为用作 rvalue 的字符串分配的内存将直接添加到分配的某个向量中,而无需为字符串重新分配内存?
std::vector
始终将数据存储在连续的内存块中。
在这两种情况下,如果要推回的string
都无法容纳
已经分配的内存,将有重新分配。
通过执行v.push_back(std::move(s))
数据将被移动到vector
中的std::string
从s
,所以s
数据的未使用副本不会保留在内存中。
这对于大量数据可能更有效,但在您的情况下,这
不会有太大区别。
在第二种情况下,您还必须初始化另外两个string
...
相关文章:
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- 为什么 vector 的方法调整大小会创建一个额外的对象?
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 从函数为 std::vector 创建自定义扩展
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- 动态创建 std::vector 并将其传递给另一个函数的各种方法
- 从函数应用程序创建 std::vector
- 从 std::vector 创建 OpenCV 垫子的有效方法
- 如何创建一个继承自 std::vector 的类
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 使用 ::std::vector 创建数组
- C++ - 为 std::vector 创建新的构造函数<double>?
- 使用boost::mpl::vector创建可变模板
- 从std::vector创建tensorflow::张量的最有效方法
- 动态创建std::vector //创建指向vector的指针
- 如何访问使用vector创建的对象的元素