gpt4 book ai didi

c++ - 构建字符串 vector 时是否有拷贝?

转载 作者:行者123 更新时间:2023-12-02 02:28:07 25 4
gpt4 key购买 nike

以下代码将“我的字符串”拆分为 vector<string> :

std::stringstream ss{"my string"};
std::vector<std::string> vec;
std::string tmp;

while (std::getline(ss, tmp, ' ')) {
vec.push_back(tmp);
}

我的理解是getline将其结果写入 tmp然后tmp通过复制将其插入 vector 中。但这样做会更有效率吗vec.push_back(std::move(tmp))相反,我们可以避免复制?

最佳答案

What I understand is that getline writes its result into tmp and then tmp get pushed into the vector by copying it.

这是正确的。由于 tmp 是左值,因此必须创建一个拷贝。

But would it be more efficient to do vec.push_back(std::move(tmp)) instead so we avoid the copy?

是的。如果您使用 move,则只需进行几次指针/整数交换,而不是复制整个字符串。这意味着它可以更快。使用 getline 来填充每次迭代中 move 的字符串是安全的,因此无需担心 ( source )。

唯一不更快的方法是字符串是否具有短字符串优化,并且您放入字符串中的数据是否足够短以符合其条件。然后,您实际上正在处理一个字符数组,并且必须进行复制,因为数组无法 move 。

关于c++ - 构建字符串 vector 时是否有拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400055/

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