通过在每个元素后添加逗号,将C ++ Vector转换为CSV

时间:2011-03-13 04:01:15

标签: c++ vector

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。

5 个答案:

答案 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(); //...

不太可能编译:)