#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;
}
Run Code Online (Sandbox Code Playgroud)
为什么输出中出现零?
输出应该不带零。
在第二个push_back函数中,如果我使用b[j]则不会出现零。
您正在a用 2 个空白进行初始化vector,然后将 2 个已填充的vector内容推入其中。
您正在b使用m默认零的数量进行初始化,然后将m用户输入的整数推入其中。
您不应该vector使用其构造函数中的值进行初始化。这会将默认值推入vector,这会影响您的结果。在这种情况下,只需删除构造函数值并让push_back()我们为您处理添加即可。
如果您想预分配 avector的内存而不向其添加值,请改用其reserve()方法,例如:
vector<vector<int> >a;
a.reserve(2);
...
vector<int> b;
b.reserve(m);
Run Code Online (Sandbox Code Playgroud)
否则,如果您确实使用构造函数来预先填充vectors 的默认值,那么您需要更改循环以使用,vector::operator[]而不是vector::push_back(),例如:
vector<vector<int> >a(2);
for(int i=0;i<2;i++)
{
...
vector<int> b(m);
for(int j=0;j<m;j++)
{
...
b[j] = k;
}
a[i] = b;
}
Run Code Online (Sandbox Code Playgroud)