将带有图像值的文本(txt)文件读入Vector

时间:2014-10-21 18:23:11

标签: c++ vector

我正在将包含图像值的txt文件读入2D矢量。但是,当代码完成读取文件时,当我检查向量的大小时,它的尺寸与我期望的向量大小不相等(5568行乘5877列)。请告诉我哪里出错了,我仍然是C ++的学习者。以下是我的代码:

enum ERROR{
    FAILED_TO_OPEN_FILE = 1,
    FILE_IS_NOT_OPEN    = 2
};

//load training vector
std::ifstream trainingset;
trainingset.open("E:\\DATA\\WorkDIR\\Fuhrberg\\2009\\Input\\try.txt");
 if (!trainingset) {
     cout << "Cannot open file.\n";
     return FAILED_TO_OPEN_FILE;
 }
const int gRows = 5568, gCols = 5877;
vector <vector<int>> traindata(gRows, vector<int >( gCols ) );
if(!trainingset.is_open()) return FILE_IS_NOT_OPEN;
for (int iii = 0; iii < gRows; iii++){
    vector<int> row;
    for (int jjj = 0; jjj < gCols; jjj++){
        int readFromFile = 0;
        trainingset >> readFromFile;
        row.push_back(readFromFile);
        //cout << row[jjj] << "\t"
    }
    traindata[iii] = row;
    //cout << endl;
}
trainingset.close();
cout << "vector size \t" << traindata.size() <<endl;

1 个答案:

答案 0 :(得分:1)

解决方案1 ​​

只需改变:

vector <vector<int>> traindata(gRows, vector<int >( gCols ) );

使用:

vector <vector<int>> traindata;

首先,您使用vector元素(默认值)创建gRows,然后使用push_back(),这样您就可以了最后插入更多元素。


此外,我建议您保留grows,因此,您的代码将如下所示:

vector <vector<int>> traindata;
traindata.reserve(grows);

解决方案2

另一种可能性是使用traindatapush_back()来定义operator[],但不要使用=

这样你必须改变:

traindata.push_back(row);

使用:

traindata[iii] = row;
相关问题