多维向量追加
C++ Multidimensional Vectors Appending
假设我有一个2D向量:
std::vector<std::vector<int>> world;
我想实现这样的东西:
world[0][0] = x;
world[0][1] = y;
etc
所以我想出了这个函数:
int Controller::AddBody(SDL_Rect RECT, SDL_Color COLOR)
{
world[world.size() + 1].push_back(RECT.x);
world[world.size() + 1].push_back(RECT.y);
world[world.size() + 1].push_back(RECT.w);
world[world.size() + 1].push_back(RECT.h);
world[world.size() + 1].push_back(COLOR.r);
world[world.size() + 1].push_back(COLOR.g);
world[world.size() + 1].push_back(COLOR.b);
world[world.size() + 1].push_back(COLOR.a);
return world.size() + 1;
}
但是会创建一个异常。我不明白为什么?
这是使用c++ 11中添加的新放置方法和初始化器列表来获得可接受答案的更现代的方法:
int Controller::AddBody(SDL_Rect RECT, SDL_Color COLOR)
{
world.emplace_back(std::vector<int>{
RECT.x,
RECT.y,
RECT.w,
RECT.h,
COLOR.r,
COLOR.g,
COLOR.b,
COLOR.a
});
return world.size() + 1;
}
现场演示
world[world.size() + 1]将指向vector的末尾(比world.end()多一个)。
回头看看你的世界向量真正代表了什么:向量的向量。所以对于你的世界[]向量中的每一个新条目,你想要添加一个新的向量。
代码应该是这样的:int Controller::AddBody(SDL_Rect RECT, SDL_Color COLOR)
{
std::vector<int> newVec;
newVec.push_back(RECT.x);
newVec.push_back(RECT.y);
newVec.push_back(RECT.w);
newVec.push_back(RECT.h);
newVec.push_back(COLOR.r);
newVec.push_back(COLOR.g);
newVec.push_back(COLOR.b);
newVec.push_back(COLOR.a);
world.push_back(newVec);
return world.size();
}
请记住,当使用std::vector时,[]操作符只允许访问数组中已经存在的元素。所以如果你的数组只有3个元素,而你试图设置第4个元素,你就会得到一个异常。你必须要么调整vector的大小,要么将一个新元素推入vector以创建一个新元素。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 将数组追加到向量中
- 将现有shared_ptr追加到shared_ptr向量
- 如何使用 C++ 向量追加列表模型
- 将"pointer to a child class"追加到"pointer to the parent class"向量中
- 将循环的输出追加到 c++ 中字符串向量的元素 已编辑
- 多维向量追加
- 在并行追加时,使用向量列表和向量的向量对性能的影响
- C++类的成员函数中导致异常行为的指针的追加向量
- 将元素追加到向量会导致后续排序失败