vector<string> v;
v.push_back("A");
v.push_back("B");
v.push_back("C");
v.push_back("D");
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
//printout
cout << *it << endl;
}
我想在每个元素之后添加一个逗号,如下所示: A,B,C,d
我尝试过在Google上进行研究,但我只找到了vector
的CSV。
答案 0 :(得分:7)
您可以在for
循环中输出逗号:
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) {
//printout
cout << *it << ", " << endl;
}
或者,您可以使用copy
算法。
std::copy(v.begin(), v.end(), std::ostream_iterator<char*>(std::cout, ", "));
答案 1 :(得分:6)
循环方式:
for (vector<string>::iterator it = v.begin(); it != v.end(); ++it) {
if (it != v.begin()) cout << ',';
cout << *it;
}
“聪明”的方式:
#include <algorithm>
#include <iterator>
if (v.size() >= 2)
copy(v.begin(), v.end()-1, ostream_iterator<string>(cout, ","));
if (v.size() >= 1)
cout << v.back();
答案 2 :(得分:2)
使用普通的ostream_iterator,你会在每个数据项之后得到一个逗号 - 包括你不想要的最后一个数据项。
我在previous answer中发布了infix_iterator
来修复此问题,只在数据项之间插入逗号,而不是在最后一个之后。
答案 3 :(得分:0)
下面应该做的工作。谢谢。
ofstream CSVToFile("ava.csv", ios::out | ios::binary);
//////////////////vector element to CSV////////////////////////////////////////
for (std::vector<string>::iterator i = ParamHeaders.begin(); i != ParamHeaders.end(); i++)
{
if (i != ParamHeaders.begin())
{
CSVToFile << ",";
std::cout << ",";
}
std::cout << *i;
CSVToFile << *i;
}
答案 4 :(得分:-1)
要避免使用尾随逗号,请循环直到 v.end() - 1 ,然后输出 v.back(),例如:
#include <vector>
#include <iostream>
#include <iterator>
#include <string>
#include <iostream>
template <class Val>
void Out(const std::vector<Val>& v)
{
if (v.size() > 1)
std::copy(v.begin(), v.end() - 1, std::ostream_iterator<Val>(std::cout, ", "));
if (v.size())
std::cout << v.back() << std::endl;
}
int main()
{
const char* strings[] = {"A", "B", "C", "D"};
Out(std::vector<std::string>(strings, strings + sizeof(strings) / sizeof(const char*)));
const int ints[] = {1, 2, 3, 4};
Out(std::vector<int>(ints, ints + sizeof(ints) / sizeof(int)));
}
你发布了BTW:
vector<string> v;
//...
for (vector<int>::iterator it = v.begin(); //...
不太可能编译:)