为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?
Posted
技术标签:
【中文标题】为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?【英文标题】:Why is the vector increasing its size to 10 when i am initialising its size to 5 and giving only 5 elements?为什么当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10? 【发布时间】:2020-04-05 13:57:16 【问题描述】:所以我在向量上做这个问题,我必须接受输入然后反转所有元素
int main()
int i,n,a;
cin >> n;
vector<int> arr(n);
for(i=0;i<n;i++)
cin >> a;
arr.push_back(a);
sort(arr.begin(),arr.end());
for(i=0;i<n;i++)
cout << arr[i] << " ";
return 0;
我写了这段代码,我提到向量的大小为 n,并且只在其中推送 n 个元素。但是对于 5 个元素,输出结果为 0 0 0 0 0。我猜这是因为向量已将其容量扩展到 10,因此最后 5 个元素被打印出来,显然是 0。为什么会发生这种情况?
【问题讨论】:
因为你使用了arr.push_back(a);
而不是arr[i] = a;
【参考方案1】:
vector<int> arr(n);
从一开始就创建一个大小为n
的向量,所有元素都初始化为int
也就是零。然后循环通过push_back
添加更多元素n
。
【讨论】:
【参考方案2】:vector<int> arr(n);
由于您声称n = 5
,这行代码创建arr = 0, 0, 0, 0, 0
然后你运行一个循环 5 次,并通过 push_back
向你的向量添加另外 5 个元素:
for(i=0;i<n;i++)
cin >> a;
arr.push_back(a); // <-- mistake
然后通过
打印前 5 个元素(为 0)for(i=0;i<n;i++)
cout << arr[i] << " ";
这就是为什么,你的输出是0 0 0 0 0
。
解决方案:
您应该将这些元素添加到您为矢量保留的空间中:
将arr.push_back(a);
替换为arr[i] = a;
旁白:
所以我在向量上做这个问题,我必须接受输入和 然后反转所有元素
sort(arr.begin(),arr.end());
不会帮助您完成这项任务。
你应该使用std::reverse
:
reverse(arr.begin(), arr.end());
【讨论】:
以上是关于为啥当我将其大小初始化为 5 并且只给出 5 个元素时,向量的大小会增加到 10?的主要内容,如果未能解决你的问题,请参考以下文章
PHP:为啥 strtotime 转换给出不同的值并且只限于特定的日期?
为啥存储过程没有在一个字符串中给出输出并且在 MySql 6.0 上执行的存储过程在 MySql 5.0 上给出错误