【问题标题】:Initializing some elements of vector of defined size初始化定义大小的向量的一些元素
【发布时间】:2022-06-10 21:13:47
【问题描述】:

有没有办法在定义向量的大小后初始化向量的前几个元素,例如 -

vector<int> vec (10);

这不起作用并产生编译器错误 -

vector<int> vec(10) {1,2,3};

例如对于数组,我们可以做同样的事情 -

int arr[5] {1,2,3}; // This will initialize the first 3 elements of the array to 1,2,3 and the remaining two to 0.

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    简而言之,没有。您可以填写您想要在向量中的全部内容:

    vector<int> vec{1, 2, 3, 0, 0, 0, 0, 0, 0, 0};
    

    这将为您提供 10 个元素的 vector

    或者,您可以创建vector,然后调用resize 使其变大(用0 填充其余元素):

    vector<int> vec{1, 2, 3};
    vec.resize(10);
    

    你一般不需要对vector做这种事情,因为不像array,你可以根据需要扩展vector,创建之后:

    vector<int> vec{1, 2, 3};
    vec.push_back(4);
    

    【讨论】:

      【解决方案2】:

      没有办法像使用数组那样在一行中完成所有操作。你可以使用

      vector<int> vec{1,2,3};
      vec.resize(10);
      

      但这确实使代码不太容易使用。另一种选择是将其包装在类似

      的函数中
      template <typename T> 
      auto make_sized_vector(std::intializer_list<T> il, std::size_t size = 0)
      {
          vector<T> vec(il);
          vec.resize(std::max(size, il.size()));
          return vec;
      }
      

      然后你可以像这样使用它

      auto vec = make_sized_vector<int>({1, 2, 3}, 10);
      

      【讨论】:

        【解决方案3】:

        您可以使用例如分配成员函数。你来了

        vector<int> vec(10);
        vec.assign(  {1,2,3} );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-21
          • 1970-01-01
          • 1970-01-01
          • 2013-02-06
          相关资源
          最近更新 更多