【问题标题】:hHow to fill remaining places with zeros?如何用零填充剩余的地方?
【发布时间】:2021-12-05 06:00:57
【问题描述】:
#include <bits/stdc++.h>
using namespace std;

int main() {   
  array<vector<int>,10>arr1;

  arr1[0].push_back(1);
  arr1[0].push_back(2);
  arr1[0].push_back(3);
  arr1[1].push_back(4);
  arr1[1].push_back(5);
  arr1[2].push_back(6);
  arr1[7].push_back(100);

  for(auto i:arr1) {
    for(auto j :i)
      cout<<j<<" ";cout<<"\n";
  }
}

我正在创建向量数组并推送一些值,但我不知道如何使剩余的位置为零。 我有一个想法,首先让每个数组内部的所有向量都保存大小为 10 的零。而不是使用 push_back,我将使用 at()

但我需要代码在数组零内创建大小为 10 的向量。

输出

1 2 3 
4 5 
6 




100 


Q2)

有什么区别
array&lt;vector&lt;int&gt;,10&gt;arr;
vector&lt;int&gt; arr[10];

【问题讨论】:

  • 如果您有多个问题要问,我建议您提出多个问题

标签: c++ arrays vector stl


【解决方案1】:

你可以这样做:

array<std::vector<int>,10>arr1;
for ( auto& vec : arr1 )
    vec = std::vector<int>(10, 0);

默认使用0s 填充所有向量。但是,您不能再执行push_back,因为它将插入到11th 位置。

第二个问题:

它们都是等价的(静态数组持有指向动态数组的指针)。 array&lt;vector&lt;int&gt;,10&gt;arr 可能是更好的方法,因为它允许您使用范围循环和其他 STL 算法。

【讨论】:

  • 我不能做这样的事情吗? vector&lt;vector&lt;int&gt;&gt;vec(10,vector&lt;int&gt;(10,0)); 这项工作适用于向量的向量。同样,如何才能使所有内容都为0?
  • @Zero 是的,可以。不幸的是,使用数组的唯一方法是分两行:std::array&lt;vector&lt;int&gt;, 10&gt; arr1; arr1.fill( std::vector&lt;int&gt;(10, 0 ) );
  • 您能否详细说明为什么array&lt;vector&lt;int&gt;,10&gt;arr; 是最好的。我不明白为什么vector&lt;int&gt;arr[10]; 不允许我们使用 STL 算法。
  • @Zero STL 算法设计用于iterators,对于大多数基本容器来说,它只是指针的包装。好消息是默认情况下基指针被视为随机访问迭代器,但出于可读性、一致性和(有时)内存管理的目的,最好在原始指针周围使用智能包装器。在这种情况下,std::array 提供了一些原始数组没有的实用功能。例如,带有边界检查的索引at().
  • 你能告诉我在哪里可以深入了解 STL。欢迎任何课程或资源建议。
猜你喜欢
  • 2021-08-25
  • 2012-01-05
  • 2018-05-29
  • 2017-04-27
  • 2013-09-28
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多