C++ C++;

C++ C++;,c++,vector,stl,C++,Vector,Stl,使用第1个方法声明向量显示与另一个不同的行为。4. 对于ex-如果用第1种方式声明的向量包含[1,1,2,1,3,3,2]等数据 如果我们使用向量大小的方法作为vectorname[1].size(),则返回向量中出现1的次数,对于vectorname[2].size()或vectorname[3].size(),返回的次数相同。 1.矢量数据[大小]//第1种方法[1][包含VScode snap][1] 但是,使用第二个方法在VScode(1.50.1版)中声明它给出的向量和错误,问题信息

使用第1个方法声明向量显示与另一个不同的行为。4. 对于ex-如果用第1种方式声明的向量包含[1,1,2,1,3,3,2]等数据 如果我们使用向量大小的方法作为
vectorname[1].size(),则返回向量中出现1的次数,对于vectorname[2].size()或vectorname[3].size(),返回的次数相同。

1.矢量数据[大小]//第1种方法[1][包含VScode snap][1]
但是,使用第二个方法在VScode(1.50.1版)中声明它给出的向量和错误,问题信息为-“表达式必须具有类类型

2.vector<int> data(size);//2nd method[2][Contains VScode snap][2]
2.矢量数据(大小);//第二种方法[2][包含VScode捕捉][2]
[1]
[2]第一种方法没有声明单个
向量
,它声明了一个
大小
向量数
的数组。第二种方法确实创建了一个初始化整数为零的
大小
向量,它应该编译。从您给我们的信息来看,出现错误的原因还不清楚,但似乎是错误可能是因为您的编译器无法识别
向量
名称,因为您没有在
向量
之前包含
或没有编写
标准::
至于图片()中的编译器错误,您所做的是:

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

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

(对于其他方法,这同样是有效的语法,但由于第一个方法的每个向量保存的长度都是零,因此也可以编写
int ans=0;

我看到另外两个错误:

我假设最小值是用来接管向量中的值,而不是它们不存在的大小。如果是这样,那么代码假设
数据[3]
存在。但是向量的长度是用户输入的,at可能只有1。在这种情况下,甚至
数据[1]
将存在,当您尝试访问这些元素时,在运行时会出现分段错误

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

作为一个评论,在我看来,你想用<代码> [i] <代码>访问向量的第i个元素,而不是<代码> [I-1 ] /代码>,并且你使用<代码> n+1 作为向量长度,而不是<代码> n>代码>。尽管这本身不是错误的,但是C++是不寻常的。


此外,在堆栈溢出时,不鼓励像您那样发布图片,至少没有充分的理由。直接发布代码(以及错误输出)作为文本。请注意,您在帖子中实际编写的向量初始化的单行是完全正确的,而您的错误发生在您未写出的另一行,并且仅出现在图片中。请始终发布整个代码(或者如果您有多行代码,请创建一个).

第一种方法创建了一个
大小
空向量的数组。第二种方法创建了一个包含
大小
元素的向量。第一种方法你不声明向量,你声明向量数组。至于为什么第二种变体没有编译,请提供帮助,而不要对其进行向下投票。谢谢。目前没有人能提供帮助但你要问一个恰当的问题,母鸡downvotes@Slava谢谢你的回答。它消除了我的大部分疑问。抱歉,如果这不是一个合适的问题。我试着研究它,但没有找到任何合适的资源。如果你能分享一些与此相关的有用信息,那就太好了。谢谢。在第二种方法中,它一定不是编译器错误。很抱歉没有添加与之相关的全部图片,但我已使用上面的名称空间std添加,因此无需在代码中再次添加std::vector或类似内容。感谢您的回答。
vector<int> data(n + 1);
...
data->push_back(x);
data.push_back(x);