gpt4 book ai didi

c++ - 有没有更有效的方法从流中设置 std::vector ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:04 25 4
gpt4 key购买 nike

目前,我设置了一个 std::vector<char> 的值来自 std::ostringstream如下:

void
foo(std::vector<char> &data, std::stringstream &stream) {
data = std::vector<char>(stream.str().begin(), stream.str().end());
}

我想知道在 C++ 中使用 STL 是否有更有效的方法,或者我在这里给出的方法是否合适?使用 std::stringstream 会更好吗?相反?

最佳答案

正如评论中所指出的,由于对 str() 的两次调用,您的代码不正确。为了提高效率,您可以避免创建临时的 vector,如下所示:

void foo(std::vector<char> &data, std::stringstream &stream) {
const std::string& str = stream.str();
data.assign( str.begin(), str.end() );
}

您还可以通过使用 std::istreambuf_iterators 来避免 std::string:

void foo(std::vector<char> &data, std::stringstream &stream) {
data.assign(
std::istreambuf_iterator<char>( stream ), std::istreambuf_iterator<char>()
);
}

但考虑到这些是输入迭代器vector 没有机会知道将分配多少数据,并且性能可能会更差一些,因为它不能保留足够的空间以避免重新分配。

关于c++ - 有没有更有效的方法从流中设置 std::vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823264/

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