#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
vector<vector<int> >a(2);
for(int i=0;i<2;i++)
{
int m;
cout<<"Enter number of elements on the row:"<<endl;
cin>>m;
vector<int> b(m);
cout<<"Element:"<<endl;
for(int j=0;j<m;j++)
{
int k;
cin>>k;
b.push_back(k)//if i use b[j]=k; here the zeros don't appear.
//cout<<b[j];
}
a.push_back(b);
}
for(unsigned int i=0;i<a.size();i++)
{
for(unsigned int j=0;j<a[i].size();j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
为什么输出中会出现零?
输出应不含零。
在第二个push_back
函数中,如果我使用b[j]
,那么零不会出现。
1条答案
按热度按时间izkcnapc1#
您正在初始化
a
,其中包含2个空白vector
s,然后将2个填充的vector
s推入其中。您正在使用
m
的默认零来初始化b
,然后将m
用户输入整数推入其中。不应该在
vector
的构造函数中使用值初始化。这会将默认值推送到vector
中,这会导致结果出错。在这种情况下,只需删除构造函数值,让push_back()
为您处理加法。如果你想预先分配
vector
的内存而不给它添加值,可以使用它的reserve()
方法,例如:否则,如果你确实使用构造函数预先填充
vector
的默认值,那么你需要改变你的循环使用vector::operator[]
而不是vector::push_back()
,例如: