C ++中这两个向量声明之间的区别

时间:2020-11-01 20:55:48

标签: c++ vector stl

使用第一种方法声明向量显示出与其他向量不同的行为。 4 例如-如果用第一种方式声明的向量包含诸如[1,1,2,1,3,3,2] 之类的数据 如果我们使用向量大小的方法为vectorname[1].size() this returns the number of occurrences of 1 in the vector and same for vectorname[2].size() or vectorname[3].size().

1.vector<int> data[size];//1st method[1][Contains VScode snap][1]

但是,使用第二种方法声明它给出的向量,并在VScode(1.50.1版)中出错,问题信息为-“ 表达式必须具有类类型

2.vector<int> data(size);//2nd method[2][Contains VScode snap][2]

[1] https://imgur.com/0RbrciK [2] https://imgur.com/5D9voNN

2 个答案:

答案 0 :(得分:1)

第一个方法没有声明单个vector,而是声明了size个空vector数组。第二种方法的确创建了一个带有size零初始化整数的向量,并且应该进行编译。您提供给我们的内容尚不清楚您出错的原因,但这似乎是因为您的编译器无法识别vector名称,因为您没有包含<vector>或没有不要在std::之前写vector

答案 1 :(得分:0)

至于图片中的编译器错误(https://imgur.com/5D9voNN),您要做的是:

vector<int> data(n + 1);
...
data->push_back(x);

请注意,data不是指针。但是->箭头运算符)是用于通过指针调用方法 的语法。
只需将行更改为

data.push_back(x);

(使用另一种方法,这是有效的语法,因为您有一个向量数组,在这种情况下,data->push_back[x];会将x推回数组中的第一个向量。对于给定的上下文,语义上存在疑问,但是仍然有效的语法。)

代码中的另一个错误是您以后有data[1].size()data[1]是向量中的第二个元素,因此是整数类型。整数没有方法size()

(使用另一种方法,这再次将是有效的语法,但是由于除第一个向量外的每个向量的长度都为零,因此您也可以编写int ans = 0;。)

我看到另外两个错误:

我认为最小值应代替矢量的大小而不是矢量的值。如果是这样,则您的代码假定data[3]存在。但是向量的长度是用户输入的,可能只有1。在这种情况下,甚至都不存在data[1],并且在尝试访问这些元素时会在运行时遇到分段错误。 / p>

第二,首先创建一个长度为n + 1的向量而不初始化值,然后再推回另外的n个元素。之后,向量的长度将为2n + 1。这是有效的代码,但是我坚信,相反,您想要一个长度为n + 1的向量。如果是这样,您想使用data.push_back(x);而不是data[i] = x;。或者,将向量创建为零长度向量,然后使用push_back。 (不过,另一种方法更好。)

请注意,在我看来,您想使用[i]而不是[i-1]访问向量的ith元素,并且将n+1用作向量长度而不是{ {1}}因此。尽管这本身并没有错,但是对于C ++来说却是不寻常的。
另外,在堆栈溢出时,不建议像您一样张贴图片,至少没有充分的理由。直接将代码(和错误输出)发布为文本。请注意,您实际上在帖子中写的矢量初始化的单行是完全正确的,并且您的错误发生在您未写出的另一行上,仅出现在图片中。始终张贴整个代码(或者,如果您有多行,则创建一个MVCE)。

相关问题