我有这个变量:
struct mat{
int row;
int column;
};
vector<bool> aux;
在main函数中,我通过这种方式初始化mat的向量:
int main(){
int n,r,c;
char s;
cin >> n;
vector<mat> matrices = vector<mat> (27);
aux = vector<bool> (32,false);
for(int i=0; i<n;++i) {
cin >> s >> r >> c;
matrices[s-'A'].row = r;
matrices[s-'A'].column = c;
aux[s-'A'] = true;
}
但是当我离开for
循环时,我调用了一个在shell中写入向量矩阵的函数:
void writeMatrices(vector<mat>& matrices){
for(int i = 0; i < aux.size(); ++i){
if(aux[i]) {
cout << char ('A'+i) << " Rows: " << matrices[i+'A'].row << " Columns: " << matrices[i+'A'].column << endl;
}
}
}
我只获得了0。
有人知道为什么吗?
答案 0 :(得分:1)
问题是您在读取索引时错误地将'A'
的值添加到索引中。 writeMatrices
的代码应改为:
void writeMatrices(vector<mat>& matrices){
for(int i = 0; i < aux.size(); ++i){
if(aux[i]) {
cout << char ('A'+i)
// note that the index for matrices should be i, not i+'A' !
<< " Rows: " << matrices[i].row
<< " Columns: " << matrices[i].column
<< endl;
}
}
}
与此输入数据一起使用:
6
A 1 2
B 2 3
C 3 4
D 4 5
E 5 6
F 6 7
我们现在得到这个输出:
A Rows: 1 Columns: 2
B Rows: 2 Columns: 3
C Rows: 3 Columns: 4
D Rows: 4 Columns: 5
E Rows: 5 Columns: 6
F Rows: 6 Columns: 7
您的代码中的某些错误检查可以让您更快地发现此问题。
答案 1 :(得分:0)
您的matrices集合有27个元素。您的bool(aux)集合有32个元素,超过了大小或矩阵集合。你的for循环正在执行&#34; n&#34;时间可能是任何取决于输入的东西。您的收集索引器是&#34; s&#39; A&#39;&#34;&#39;我假设你输入的内容类似于&#34; A,B,C,D,......&#34;总而言之,这是一种非常奇怪,随意且不可靠的方式来处理集合。你应该只有1个最大大小和1个循环索引器变量,并将它用于一切。或者从空集合开始并使用&#34; push_back()&#34;添加每个元素。你也可以添加&#34; bool aux&#34;作为你&#34; mat&#34;的成员结构,然后你就不需要一个单独的&#34; aux&#34;集合。
在您提供的代码中也没有任何内容,其中包括&#34; r&#34;和&#34; c&#34;,所以除非这些代码在未显示的代码中设置,否则您只需将行和列字段设置为默认值r和c。
答案 2 :(得分:0)
在for循环中,您使用了矢量矩阵的索引s-'A'
for(int i=0; i<n;++i) {
cin >> s >> r >> c;
matrices[s-'A'].row = r;
matrices[s-'A'].column = c;
aux[s-'A'] = true;
}
我猜他的值在'A' - 'Z'
范围内然而,在函数内部使用了索引`i +'A'向量矩阵
cout << char ('A'+i) << " Rows: " << matrices[i+'A'].row << " Columns: " << matrices[i+'A'].column << endl;
我认为向量矩阵中的索引必须与向量aux中的索引相符。这是函数的主体应该看起来像
void writeMatrices( const vector<mat> &matrices )
{
for ( std::vector<bool>:size_type i = 0; i < aux.size(); ++i )
{
if( aux[i] )
{
cout << char ('A'+i) << " Rows: " << matrices[i].row << " Columns: " << matrices[i].column << endl;
}
}
}
我认为容器std::map<char, mat>
更适合您的任务。