将vector <int>转换为string

shn*_*shn 41 c++ string vector

在C++中,将int(即vector<int>)向量转换为字符串的最简单方法是什么?

Fre*_*son 52

也许std::ostream_iteratorstd::ostringstream:

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

int main()
{
  std::vector<int> vec;
  vec.push_back(1);
  vec.push_back(4);
  vec.push_back(7);
  vec.push_back(4);
  vec.push_back(9);
  vec.push_back(7);

  std::ostringstream oss;

  if (!vec.empty())
  {
    // Convert all but the last element to avoid a trailing ","
    std::copy(vec.begin(), vec.end()-1,
        std::ostream_iterator<int>(oss, ","));

    // Now add the last element with no delimiter
    oss << vec.back();
  }

  std::cout << oss.str() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,如果一个人知道`vec`是非空的,那么`vec.end() - 1`只能很好地定义. (10认同)
  • @ildjarn:好点。`vec.back()` 也是如此。 (2认同)

Dre*_*pin 51

我通常这样做......

#include <string>
#include <vector>

int main( int argc, char* argv[] )
{
    std::vector<char> vec;
    //... do something with vec
    std::string str(vec.begin(), vec.end());
    //... do something with str
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 这在转换 `vector&lt;char&gt;` 时也是有意义的。如果您对“vector&lt;int&gt;”使用相同的值,这些值将转换为 char,我认为这不是意图。 (4认同)
  • 应该包括哪些头文件? (2认同)
  • 这对于显示很有用,但不能与任意定界符一起使用。 (2认同)

Rob*_*obᵩ 5

这是一个使用自定义输出迭代器的替代方法.此示例在空列表的情况下表现正常.此示例演示如何创建自定义输出迭代器,类似于std::ostream_iterator.

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

struct CommaIterator
:
  public std::iterator<std::output_iterator_tag, void, void, void, void>
{
  std::ostream *os;
  std::string comma;
  bool first;

  CommaIterator(std::ostream& os, const std::string& comma)
  :
    os(&os), comma(comma), first(true)
  {
  }

  CommaIterator& operator++() { return *this; }
  CommaIterator& operator++(int) { return *this; }
  CommaIterator& operator*() { return *this; }
  template <class T>
  CommaIterator& operator=(const T& t) {
    if(first)
      first = false;
    else
      *os << comma;
    *os << t;
    return *this;
  }
};

int main () {
  // The vector to convert
  std::vector<int> v(3,3);

  // Convert vector to string
  std::ostringstream oss;
  std::copy(v.begin(), v.end(), CommaIterator(oss, ","));
  std::string result = oss.str();
  const char *c_result = result.c_str();

  // Display the result;
  std::cout << c_result << "\n";
}
Run Code Online (Sandbox Code Playgroud)