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

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

10-02 05:41
查看更多