我有一个可以是任意大小的文件,并且是一系列char
值之间没有任何空格(除了空格被视为网格的空白单元格)。
xxxxxxx
xx xx
xxyyyxx
经过一些很好的帮助,我已经使用了vector<vector<char> >
的方法,但我似乎无法填充它。
void readCourse(istream& fin) {
// using 3 and 7 to match example shown above
vector<vector<char> > data(3, vector<char>(7));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 7; j++) {
fin.get(data[i][j]); // I believe the problem exists here
} // Does the .get() method work here?
} // Or does it need to be .push_back()?
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 7; j++) {
cout << data[i][j];
}
}
}
我填充2D矢量的方法有效吗?如果没有,你能指出我正确的方向吗?
答案 0 :(得分:0)
解决方案我最终在ADT实施后使用:
<div class="flex">
<div class="grow-1">left sidebar</div>
<div class="grow-1">content</div>
<div class="grow-1">right sidebar</div>
</div>
答案 1 :(得分:0)
我使用单个vector<char>
来保持简单高效:
vector<char> readCourse(istream& fin) {
vector<char> course(3*(7+2)); // 3x7 plus newlines
fin.read(course.data(), course.size());
course.resize(fin.gcount());
auto end = remove(course.begin(), course.end(), '\n');
end = remove(course.begin(), end, '\r');
course.erase(end, course.end()); // purge all \n and \r
return course;
}
这是获取所有数据的单一输入操作,然后删除您不需要的字符。然后,您可以按照以下方式访问结果:
course.at(x + y*7) // assuming width 7
这可能看起来有点不方便,但它有效且紧凑 - 开销总是三个指针和一个堆分配,而不是与行数成比例。