gpt4 book ai didi

c++ - 首先创建字符串然后通过 move 语义将其添加到 vector 或在 vector 中创建元素是否有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:49 27 4
gpt4 key购买 nike

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));

在第一种情况下,我们首先在 vector 中创建元素,然后修改它。我想在这么小的情况下,首先会有足够的内存保留,但如果不是 - vector v 会在内存中连续,还是只是指向字符串对象的指针?将元素添加到 vector 中的字符串元素是否会使最后一个执行内存重新分配?

在第二种情况下,是否会为用作右值的字符串分配内存并直接添加到分配的某处 vector 中而不为字符串重新分配内存?

最佳答案

std::vector始终将数据存储在连续的内存块中。
在这两种情况下,如果 string s 你想推回去装不下
已经分配内存,还会有重新分配。

通过做 v.push_back(std::move(s))数据将 move 到 std::stringvector
来自 s , 所以未使用的拷贝 s的数据不会留在内存中。
对于大量数据,这可能更有效,但在您的情况下,这
不会有太大区别。

在第二种情况下,您还必须再初始化两个 string小...

关于c++ - 首先创建字符串然后通过 move 语义将其添加到 vector 或在 vector 中创建元素是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com