- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
此帖子已于3天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
Improve this question
此函数用于获取具有{x1,x2,x3,y1,y2,y3}形式的x,y值对的向量,并返回具有如{x1,y1,x2,y2,x3,y3}这样的混洗值的向量。向量的大小为2 * n,其中n分别为x值/y值的数量。通过在函数中使用print语句,我已经确定了算法是有效的。
vector<int> shuffle(vector<int>& nums, int n) {
vector<int> temp;
temp.reserve(2*n);
int xCounter = 0;
int yCounter = n;
for (int i=0; i<2*n; i+=2){
// populate arr x val
temp[i] = (nums[xCounter]);
// populate arr y val
temp[i+1] = (nums[yCounter]);
++xCounter;
++yCounter;
}
return temp;
}
int main()
{
vector<int> yoMomma = {1,2,3,1,2,3};
vector<int> ans;
ans = shuffle(yoMomma,yoMomma.size()/2);
return 0;
}
1条答案
按热度按时间k3bvogb11#
您调用的是
reserve
,而不是resize
,所以vector
实际上并没有增加大小,只是增加了容量(预先分配的内存,将来不必重新分配就可以容纳元素),但这使得所有的索引赋值都是非法的;vector
仍然有一个长度为0,你不能赋值给任何一个索引。它碰巧工作了,因为reserve
确保那里有内存,但是所说的内存永远不会被正确析构(所以你使用没有析构函数的基元类型是一件好事)。将循环更改为:
将新值推到末尾,并保存几个不必要的变量,而不是索引。