如何将vector <int>转换为字符串?

Leg*_*end 19 c++ stl

我试图将值从C++传递给TCL.因为我不能在不使用一些复杂模块的情况下传递指针,所以我在考虑将向量转换为char数组,然后将其作为空终止字符串传递(这相对简单).

我有一个矢量如下:

12, 32, 42, 84  
Run Code Online (Sandbox Code Playgroud)

我希望转换成以下内容:

"12 32 42 48"
Run Code Online (Sandbox Code Playgroud)

我想到的方法是使用迭代器迭代向量,然后将每个整数转换为其字符串表示形式,然后将其添加到char数组(最初通过传递向量的大小动态创建).这是正确的方式还是有功能已经这样做了?

fbr*_*eto 51

关于什么:

std::stringstream result;
std::copy(my_vector.begin(), my_vector.end(), std::ostream_iterator<int>(result, " "));
Run Code Online (Sandbox Code Playgroud)

然后你可以传递指针 result.str().c_str()

  • @Adrian McCarthy:对于这个示例代码,你不需要`#include <string>`或`<iterator>`.`<sstream>`包含所需的定义.你需要`<algorithm>`,`<vector>`和`<sstream>`. (3认同)
  • 先生,我永远不会再忘记ostream_iterator和复制.谢谢. (2认同)
  • 你如何避免尾随空间? (2认同)
  • @BillyONeal:您可能在`<string>`中正确,但是对于`std :: ostream_iterator`你需要`<iterator>`. (2认同)

Joh*_*ing 5

您可以copystringstream对象和ostream_iterator适配器一起使用:

#include <iostream>

#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v;
    v.push_back(12);
    v.push_back(32);
    v.push_back(42);
    v.push_back(84);

    stringstream ss;
    copy( v.begin(), v.end(), ostream_iterator<int>(ss, " "));
    string s = ss.str();
    s = s.substr(0, s.length()-1);  // get rid of the trailing space

cout << "'" << s << "'";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

'12 32 42 84'