vector.size()返回1,即使它中有多个元素?

时间:2017-11-15 00:11:09

标签: c++ c++11

所以我不熟悉C ++中的向量,我的目标是从文件中读取一行,将其存储在字符串向量中,将其转换为整数并将其推送到int向量。我遇到的问题是,当我将char转换为int时,我松散了前导0。我想保留前导0(文件是矩阵文件)。我将最终文件存储在2D int矢量中。当我运行temp.size()时,我得到结果为1,我知道这与我如何将字符串转换为整数有关,所以我相信在向量中只存储了1个数字。

std::vector< std::vector<int> > data;
std::vector< std::vector<int> > res;
std::ifstream f("input.txt", ios::binary);
string line;
int count;
while(std::getline(f,line))
{
  std::vector<string> line_data;
  std::vector<int> temp;
  std::istringstream iss(line);
  std::string value;
  while(iss >> value)
    {   

        line_data.push_back(value);
        std::transform(line_data.begin(), line_data.end(),
                    std::back_inserter(temp),
                    [](std::string &s) {    return std::stoi(s); } );

    count = value.length();

    count = count - temp.size(); // temp.size() returns 1, why is that and how can I fix it?
        cout << count <<endl;
        temp.insert(temp.begin(),count,0);
  data.push_back(temp);

}

我的输入是未知长度的布尔方阵。比如说:

00101
10101
10100
00101
01111

编辑:

从int矢量数据获取输出时:

101
10101
10100
101
1111

失去领先0

因此我尝试计算值和temp的长度差异并手动插入0。

1 个答案:

答案 0 :(得分:0)

为什么要将二进制模式用于文本数据?简化了一点,所以它来:

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

int main()
{
    std::ifstream f("input.txt");
    std::vector< std::vector<int> > data;
    std::string line;

    // fill data
    while (std::getline(f, line))
    {
        std::vector<int> temp;
        std::transform(line.begin(), line.end(),
            std::back_inserter(temp),
            [](char c) {  return std::stoi(std::string(&c, 1)); });

        data.push_back(temp);
    }

    // print data
    for (std::vector<int> x : data)
    {
        for (int y : x)
            std::cout << y;

        std::cout << std::endl;
    }

    return 0;
}

打印:

00101
10101
10100
00101
01111