Please take note of the updates at the end of this post.
Update: I have created a public project on GitHub for this library!
I would like to have a single template that once and for all takes care of pretty-printing all STL containers via operator<<
. In pseudo code, I'm looking for something like this:
template<container C, class T, String delim = ", ", String open = "[", String close = "]">
std::ostream & operator<<(std::ostream & o, const C<T> …
Run Code Online (Sandbox Code Playgroud) 在C++中,将int(即vector<int>
)向量转换为字符串的最简单方法是什么?
我试图将值从C++传递给TCL.因为我不能在不使用一些复杂模块的情况下传递指针,所以我在考虑将向量转换为char数组,然后将其作为空终止字符串传递(这相对简单).
我有一个矢量如下:
12, 32, 42, 84
Run Code Online (Sandbox Code Playgroud)
我希望转换成以下内容:
"12 32 42 48"
Run Code Online (Sandbox Code Playgroud)
我想到的方法是使用迭代器迭代向量,然后将每个整数转换为其字符串表示形式,然后将其添加到char数组(最初通过传递向量的大小动态创建).这是正确的方式还是有功能已经这样做了?
给出最小的C++ 11 STL示例:
set<int> S = {1,2,3,4};
for(auto &x: S) {
cout << x;
cout << ",";
}
Run Code Online (Sandbox Code Playgroud)
有没有办法x
在结束前检查是否正确?此示例中的目标是输出1,2,3,4
而不是最后的最后一个逗号.目前我使用带有两个迭代器的标准for循环,
set<int>::const_iterator itr;
set<int>::const_iterator penultimate_end_itr = --S.end();
for(itr=S.begin(); itr!=penultimate_end_itr;++itr)
cout << (*itr) << ',';
cout << (*penultimate_end_itr);
Run Code Online (Sandbox Code Playgroud)
哪个有效,但非常麻烦.有没有办法在基于范围的for循环中进行检查?
编辑:问题的关键是不打印逗号分隔列表.我想知道基于范围的for循环是否具有列表中倒数第二个元素的任何知识(即它是在结束之前的一个).提出了最小的例子,所以我们都有一个共同的代码块来讨论.
Boost join可用于连接一个字符串容器,可选择用分隔符字符串分隔,如下例所示:boost :: algorithm :: join的一个很好的例子
我的STL技能很弱.我想知道是否有任何方法可以为数字容器(浮点数,双打数,整数)使用相同的函数?看起来应该有一个或两个衬里来适应其他类型.
还有stl的复制功能,这里有一个很好的例子: 如何打印出矢量的内容?
但我不喜欢它如何在每个元素之后添加分隔符字符串.我想使用boost.
我想制作一个首先输入字符串数组的程序,然后将其转换为整数,然后将其推送到矢量.
代码是这样的:
string a;
vector<long long int> c;
cout << "Enter the message = ";
cin >> a;
cout << endl;
cout << "Converted Message to integer = ";
for (i=0;i<a.size();i++)
{
x=(int)a.at(i);
cout << x << " "; //convert every element string to integer
c.push_back(x);
}
Run Code Online (Sandbox Code Playgroud)
输出 :
Enter the message = haha
Converted Message to integer = 104 97 104 97
Run Code Online (Sandbox Code Playgroud)
然后我把它写在一个文件中,在下一个程序中我想把它读回来,并将它转换回字符串,我的问题是如何做到这一点?将矢量[104 97 104 97]转换回字符串"haha".
我非常感谢任何帮助.谢谢.
这是代码,我不明白星号(*) std::string(*)
using boost::algorithm::join;
using boost::adaptors::transformed;
auto tostr = static_cast<std::string(*)(int)>(std::to_string);
Run Code Online (Sandbox Code Playgroud)
这是原始代码