c++ 为什么输出中有0?

ql3eal8s  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(336)
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7. int main() {
  8. vector<vector<int> >a(2);
  9. for(int i=0;i<2;i++)
  10. {
  11. int m;
  12. cout<<"Enter number of elements on the row:"<<endl;
  13. cin>>m;
  14. vector<int> b(m);
  15. cout<<"Element:"<<endl;
  16. for(int j=0;j<m;j++)
  17. {
  18. int k;
  19. cin>>k;
  20. b.push_back(k)//if i use b[j]=k; here the zeros don't appear.
  21. //cout<<b[j];
  22. }
  23. a.push_back(b);
  24. }
  25. for(unsigned int i=0;i<a.size();i++)
  26. {
  27. for(unsigned int j=0;j<a[i].size();j++)
  28. cout<<a[i][j]<<" ";
  29. cout<<endl;
  30. }
  31. return 0;
  32. }

为什么输出中会出现零?
输出应不含零。
在第二个push_back函数中,如果我使用b[j],那么零不会出现。

izkcnapc

izkcnapc1#

您正在初始化a,其中包含2个空白vector s,然后将2个填充的vector s推入其中。
您正在使用m的默认零来初始化b,然后将m用户输入整数推入其中。
不应该在vector的构造函数中使用值初始化。这会将默认值推送到vector中,这会导致结果出错。在这种情况下,只需删除构造函数值,让push_back()为您处理加法。
如果你想预先分配vector的内存而不给它添加值,可以使用它的reserve()方法,例如:

  1. vector<vector<int> >a;
  2. a.reserve(2);
  3. ...
  4. vector<int> b;
  5. b.reserve(m);

否则,如果你确实使用构造函数预先填充vector的默认值,那么你需要改变你的循环使用vector::operator[]而不是vector::push_back(),例如:

  1. vector<vector<int> >a(2);
  2. for(int i=0;i<2;i++)
  3. {
  4. ...
  5. vector<int> b(m);
  6. for(int j=0;j<m;j++)
  7. {
  8. ...
  9. b[j] = k;
  10. }
  11. a[i] = b;
  12. }
展开查看全部

相关问题