Een vector converteren<int> string

Wat is in C++ de eenvoudigste manier om een vector van ints (d.w.z. vector<int>) naar een tekenreeks om te zetten?


Antwoord 1, autoriteit 100%

Misschien std::ostream_iteratoren std::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;
}

Antwoord 2, autoriteit 97%

Ik doe het meestal op deze manier…

#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;
}

Antwoord 3, autoriteit 8%

Hier is een alternatief dat een aangepaste uitvoeriterator gebruikt. Dit voorbeeld werkt correct voor het geval van een lege lijst. Dit voorbeeld laat zien hoe u een aangepaste uitvoeriterator maakt, vergelijkbaar met 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";
}

Antwoord 4, autoriteit 3%

template<typename T>
string str(T begin, T end)
{
    stringstream ss;
    bool first = true;
    for (; begin != end; begin++)
    {
        if (!first)
            ss << ", ";
        ss << *begin;
        first = false;
    }
    return ss.str();
}

Dit is de str-functie die gehele getallen in een string kan veranderen en niet in een char voor wat het integer vertegenwoordigt. Werkt ook voor dubbels.

Other episodes