std::vector 不是 push_back 值到我的向量中吗? C++
Posted
技术标签:
【中文标题】std::vector 不是 push_back 值到我的向量中吗? C++【英文标题】:std::vector isn't push_back values into my vector? c++ 【发布时间】:2020-02-19 09:02:30 【问题描述】:这是我的代码。
std::vector<int> x;
std::vector<int> y;
void vector_pile()
if (x.size() > 0 && y.size() > 0)
// clear the x & y movement vectors so we can update it to the current movement vector
x.clear();
y.clear();
// set vector size
x.resize(WeaponBulletCount());
y.resize(WeaponBulletCount());
// updates pattern to move vector to reduce strain on program calculations
if (WeaponBulletCount() > 0)
for (int i = 0; i <= WeaponBulletCount(); i++)
x.push_back(i);
y.push_back(i);
std::cout << "x: " << x[i] << std::endl;
std::cout << "y: " << y[i] << std::endl;
Sleep(1000);
函数WeaponBulletCount();
返回值30。这个函数的主要原因是有一个向量可以在变量发生变化时改变,从而减少重复计算的次数。
【问题讨论】:
您将reserve
与resize
混淆了。
您是否尝试预先分配具有大小的向量,然后将值直接分配到现有索引中?我不明白你问了什么..
旁白:您可以将 x 简化为 x.resize(WeaponBulletCount()); std::iota(x.begin(), x.end(), 0);
for 循环中的条件语句看起来像一个非一错误。应该是i < WeaponBulletCount()
。
【参考方案1】:
push_back
方法在容器末尾添加新元素(标准组件库中的大多数容器都是典型的)。您在每个容器中创建了 30 个元素,然后在循环中添加了 30 个元素。 x[i]
不是您添加的元素,您正在打印由 resize
创建的值。
你必须使用reserve
来改变向量的容量(也是一种刻板的方法)。
【讨论】:
如果WeaponBulletCount
返回30,则循环中会添加31个元素。
@1201 哦,是的。他也是从零开始,条件是平等。这是另一个错误。以上是关于std::vector 不是 push_back 值到我的向量中吗? C++的主要内容,如果未能解决你的问题,请参考以下文章
C++ std::vector 可以同时处理来自多线程的 push_back 吗?
std::vector::emplace_back 比 std::vector::push_back 慢的示例?
std::vector.push_back() 的奇怪(记忆?)问题
没有匹配函数调用‘std::vector::push_back(std::string&)’