向量运算

时间:2019-07-04 16:08:50

标签: c++ vector

我一直在尝试使用C ++中的vector初始化数组并将值插入其中。编译代码时,出现以下错误。

#include <bits/stdc++.h>

using namespace std;

// Complete the hourglassSum function below.
int hourglassSum(vector<vector<int>> arr) {
  int i,j;
  int sum=0;
  vector<int> vect[16];
  vect.insert(vect.begin(),3,5);
  return 0;
}
  

** Solution.cpp:在函数'int hourglassSum(std :: vector>)'中:

     

Solution.cpp:17:6:错误:请求成员“ vect”中的“插入”   是非类类型'std :: vector [16]'

     

vect.insert(vect.begin(),3,5);

     

Solution.cpp:17:18:错误:在“ vect”中请求成员“ begin”   是非类类型'std :: vector [16]'

     

vect.insert(vect.begin(),3,5); **                     ^ ~~~~

2 个答案:

答案 0 :(得分:3)

使用

<script href="{{ asset('js/app.js') }}" defer></script>

您将vector<int> vect[16]; 定义为16个不同(且为空)向量的数组。如果您想要一个包含16个元素的矢量,应该这样做

vect

请注意,然后如果您使用vector<int> vect(16); ,则将元素添加到向量中,其大小从vect.insert(...)更改。要解决此问题,请不要使用您创建并使用的16个以上元素,例如16(用于有效索引vect[i]),或创建一个空向量并使用i


如果您真的想要一个在编译时已知大小固定的数组,则可以改用vect.emplace_back(...)

std::array

答案 1 :(得分:0)

此答案是针对OP在评论中的澄清:

您需要的是vector中的array / int,您可以使用以下命令声明一个:

std::vector<int> v(16, 0);

v是向量,其中16个元素初始化为0。 然后您想要将前3个元素更改为5,可以为此使用std::fill

std::fill(v.begin(), v.begin() + 3, 5);

包括<bits/stdc++.h>using namespace std;是不好的做法。请避免使用它们。

godbolt