我找到了有关如何使用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
。