【问题标题】:Insert data into vector将数据插入向量
【发布时间】:2013-07-07 13:50:50
【问题描述】:

我有一个 .txt 文件,其中包含以下格式的数据:

1.23,2.34,3.45
4.56,5.67,6.78

如何在向量中插入数字

vector[1]={1.23,4.56,...}
vector[2]={2.34,5.67,...}
vector[3]={3.45,6.78,...}

代码

ifstream in("data.txt");
vector<vector<int> > v;

if (in) {
    string line;
    while (getline(in,line)) {
        v.push_back(std::vector<int>());
        stringstream split(line);
        int value;
        while (split >> value)
            v.back().push_back(value);
    }
}

【问题讨论】:

  • 你不喜欢你的代码的什么地方?有用吗?
  • 当你运行你拥有的代码时会发生什么?这与您想要的有何不同?
  • 您需要创建一个std::vector&lt;float&gt; vv 而不是v.push_back(std::vector&lt;int&gt;());,并将value 推入vv 的向量中。在第二次之后,您可以将该向量 vv 添加到主向量。当然,如果这就是你的意思。
  • @MahanGM 他正在从文件中读取浮点值:)

标签: c++ file-io vector stl split


【解决方案1】:

您的代码中存在多个问题

  1. 你的内心vector应该是floatdoublevector而不是int

  2. 您的value 变量也应该是floatdouble

  3. 阅读时需要跳过分隔符(逗号)。

  4. 您需要创建与每行中的值一样多的内部向量。我在下面通过使用布尔值first 变量来完成此操作 - 我使用它来确保仅在读取第一行时创建向量。

  5. push_back 到的内部向量的索引与被推回的行上的值的列号相同。我使用变量col 来确定当前在一行上读取的列号是什么。

您需要与列数一样多的内部向量。每个内部向量的成员数与文件中的行数一样多。

ifstream in("data.txt");
vector<vector<double> > v;

bool first = false;
if (in) 
{
    string line;
    while (getline(in,line)) 
    {
        istringstream split(line);
        double value;
        int col = 0;
        char sep;

        while (split >> value)
        {
            if(!first)
            {
                // Each new value read on line 1 should create a new inner vector
                v.push_back(std::vector<double>());
            }

            v[col].push_back(value);
            ++col;

            // read past the separator                
            split>>sep;
        }

        // Finished reading line 1 and creating as many inner
        // vectors as required            
        first = true;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多