如何解决如何从文件中填充集合的向量?
我在txt文件中有一个3x3矩阵,上面有一些数字和一些零
0 0 3
1 0 0
0 2 0
我想将其读取为集合向量的向量。在我有零的位置,我想用数字123填充该单元格。就像
1231233
1123123
1232123
我想知道是否正确打印。
我已经编写了这段代码:
class Matrix {
private:
vector<vector<set<int> > > cell;
public:
Matrix(const string& filename) {
ifstream file("matrix.txt");
if (!file.good()) {
cerr<<"Error";
}
int x;
int y;
for(x=0; x<3; x++) {
for(y=0; y<3; y++) {
for(vector<vector<set<int> > >::iterator it = cell.begin(); it != cell.end(); it++) {
if(file != 0) {
cell[x][y] = file; // Don't think this part of code is good because I get error here
} else {
int z;
for(z = 1; z<4; z++) {
cell[x][y].insert(z);
cout<<cell[x][y]; // Of course I get an error here too.
}
}
}
}
}
}
}
该迭代是否有用?我不在任何地方使用“它”,但我认为必须将其使用在一个集合中。
当然有些东西不正确或丢失了,但我不明白是什么,为什么。 我必须使用向量和集合。
我希望将其打印出来,以了解是否做得好。
修改 试图写文件>> cell [x] [y]; 给我这个错误:[错误]无法将'std :: basic_istream'左值绑定到'std :: basic_istream &&'。
解决方法
您已经声明了向量的向量,但是它们都是空的。您无法按其索引访问任何元素。您可能需要将它们的大小调整为每个3
个元素。
如果您知道它们是3x3
,只需使用std::array
:
std::array< std::array<std::set<int>,3>,3> cell;
此外,set
没有实现运算符<<
,因此您必须自己(使用循环)进行操作:
cell[1][2].insert(7);
cell[1][2].insert(13);
for(auto x: cell[1][2])
std::cout << x;
std::cout << std::endl;
与运算符>>
相同:
int val(0);
std::cin >> val;
cell[1][2].insert(val);
P.S。 Matrix
的构造函数中有太多事情要做。如果文件"matrix.txt"
不存在怎么办?还是格式错误?您将拥有一个无效的对象,因此要使用它,您需要实施valid()
方法之类的方法。最好构造一个空矩阵并以其他方法(例如load()
)加载它。
这里是如何使用向量,加载和打印的方法:
std::vector<std::vector<std::set<int>>> cell(3,std::vector<std::set<int>>(3));
// load from file
int val(0);
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
file >> val;
cell[x][y].insert(val);
}
}
// print
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
for (auto it = cell[x][y].begin(); it != cell[x][y].end(); it++)
std::cout << *it;
}
}
这当然不打印任何内容,因为这些集是空的。您可以像上面一样阅读这些书集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。