C++ 迭代器,使用C++;

C++ 迭代器,使用C++;,c++,csv,for-loop,iterator,C++,Csv,For Loop,Iterator,我正在遵循Loki Astari在上的解决方案代码 如何在main函数中编写迭代器来计算CSV头中的列数 int main() { std::ifstream file("plop.csv"); for(CSVIterator loop(file); loop != CSVIterator(); ++loop) { //Instead of printing the 4th element as shown below, I want to

我正在遵循Loki Astari在上的解决方案代码

如何在main函数中编写迭代器来计算CSV头中的列数

int main()
{
    std::ifstream       file("plop.csv");

    for(CSVIterator loop(file); loop != CSVIterator(); ++loop)
    {
        //Instead of printing the 4th element as shown below, I want to  print all the
        //columns and thus determine the number of columns

         //std::cout << "4th Element(" << (*loop)[3] << ")\n";


    }
}

我想使用迭代器或某些for循环来打印它们,并确定列数,在本例中为14

如果您通读
CSVIterator
代码,它将使用具有以下方法的
CSVRow
类:

std::size_t size() const
{
    return m_data.size();
}
其中,
m_data
是一个
std::vector
,其中每个
std::string
是行中的一个单独列。因此调用
CSVRow::size
返回列数

int main()
{
    std::ifstream file("plop.csv");

    for(CSVIterator loop(file); loop != CSVIterator(); ++loop)
    {
        const auto numCols = (*loop).size();

        std::cout << "Number of Columns: " << numCols << std::endl;

        for(std::size_t i = 0; i < numCols; ++i)
        {
            // Print each column on a new line
            std::cout << (*loop)[i] << std::endl;
        }
    }
}
产出:

Number of Columns: 14
cmd
 id
 addr
 qos
 len
 lock
 prot
 burst
 size
 cache
 user
 duser
 dstrb
 data

我在您的解决方案中添加了用于打印列的代码!看看它能不能让人满意sense@user2979872你知道它的要点。请参阅我的最新版本。@user2979872还请记住,CSV文件使用逗号分隔符(因此命名为逗号分隔值)。因此,您的第一列
cmd
没有后续列所具有的额外空间(因为CSV解析器仅在逗号上拆分)。此外,我认为
是比
循环
更好的名称,但我理解这是您参考的原始答案中使用的名称。非常感谢。注意到并适当感谢。
cmd, id, addr, qos, len, lock, prot, burst, size, cache, user, duser, dstrb, data
Number of Columns: 14
cmd
 id
 addr
 qos
 len
 lock
 prot
 burst
 size
 cache
 user
 duser
 dstrb
 data