gpt4 book ai didi

c++ - 将 vector 转换为定界字符串

转载 作者:可可西里 更新时间:2023-11-01 18:25:33 26 4
gpt4 key购买 nike

如我所见here在 C# 中,有一种将 vector 转换为以字符分隔的字符串的快速简便方法:

var result = string.Join(";", data); 
var result = string.Join(";", data.Select(x => x.ToString()).ToArray());

我想知道在 C++ 中是否有相同的方法来做到这一点?

最佳答案

#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <iostream>

int main()
{
std::vector<int> data = {42, 1, 2, 3, 4, 5};

std::ostringstream oss;
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(oss, ";"));

std::string result( oss.str() );
std::cout << result << "\n";
}

注意在 C++11 中,您可以使用更通用的形式

using std::begin;
using std::end;
std::copy(begin(data), end(data), std::ostream_iterator<int>(oss, ";"));

如果可以使用 ADL,则不需要 using 声明(如上例所示)。


也可以,但效率可能有点低:

std::string s;
for(auto const& e : v) s += std::to_string(e) + ";";

可以通过std::accumulate来写在 <algorithm>作为:

std::string s = std::accumulate(begin(v), end(v), std::string{},
[](std::string r, int p){ return std::move(r) + std::to_string(p) + ";"; });

(IIRC 有一些方法可以消除复制,可能通过引用 std::string& r 来获取 lambda 参数。)


没有尾随分号的版本(感谢 Dietmar Kühl ):

std::vector<int> data = {42, 1, 2, 3, 4, 5};

std::ostringstream out;
if (!v.empty())
{
std::copy(v.begin(), v.end() - 1, std::ostream_iterator<int>(out, ";"));
out << v.back();
}

std::string result( out.str() );
std::cout << result << "\n";

关于c++ - 将 vector<int> 转换为定界字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817322/

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