v; -6ren">
gpt4 book ai didi

c++ - 使用 push_back 和 getline 时如何减少临时对象?

转载 作者:太空狗 更新时间:2023-10-29 22:56:17 26 4
gpt4 key购买 nike

我找到了 an example关于如何使用std::getline(),这是代码片段:

std::istringstream input("abc|def|gh");
std::vector<std::array<char, 4>> v;

for (std::array<char, 4> a; input.getline(&a[0], 4, '|'); )
v.push_back(a);

我们可以发现 a 是在 for 循环中构造的,它作为参数传递给 push_back。有没有更好的方法来确保没有像 a 这样的临时对象来避免开销?

我找到了一个名为 emplace_back() 的成员函数来减少临时对象的使用,但我不确定在这种情况下我该如何使用它,或者我应该把它留给编译器优化?

最佳答案

getline 需要有一个位置来获取线路,但您可以使该位置成为 v vector 中的新元素,从而避免使用一个额外的变量。将 for 循环替换为 do/while 循环:

do {
v.emplace_back();
} while (input.getline(&v.back()[0], 4, '|'));
v.pop_back();

emplace_back 取代了原始代码中的 a

关于c++ - 使用 push_back 和 getline 时如何减少临时对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605241/

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