将带有图像值的文本(txt)文件读取到Vector中

Read a text (txt) file with image values into a Vector

本文关键字:文件 读取 Vector txt 图像 文本      更新时间:2023-10-16

我正在将包含图像值的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

只需更改:

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

带有:

vector <vector<int>> traindata;

在第一种方式中,您使用gRows元素(默认元素)创建vector,然后使用push_back(),因此在末尾插入更多元素。


此外,我建议您保留grows,因此,您的代码将是这样的:

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

解决方案2

另一种可能性是让traindata的定义保持原样,但不使用push_back(),而是使用operator[]=

这样你就必须改变:

traindata.push_back(row);

带有:

traindata[iii] = row;