使用第一种方法声明向量显示出与其他向量不同的行为。 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]
答案 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)。