我正在将包含图像值的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;
答案 0 :(得分: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);
另一种可能性是使用traindata
和push_back()
来定义operator[]
,但不要使用=
。
这样你必须改变:
traindata.push_back(row);
使用:
traindata[iii] = row;