我正在编写一个程序,我需要使用以下数据结构:
struct shape
{
std::vector<float> verts; // contains the x & y values for each vertex
char type; // the type of shape being stored.
float shapeCol[3]; // stores the color of the shape being stored.
float shapeSize; // stores the size of the shape if it is a line or point
};
在我的主程序中,我需要一个shape
类型的向量。如何使用结构形状的向量将值存储到结构形状内的向量中。
例如,vector<shape> myshapes
;
如果我想将值存储到verts
向量的第一个索引中,在我的myshapes
向量的第一个索引中,我该怎么做?
在伪代码中它看起来像这样,i
是索引:
myshapes[i].vector[i] = 4; // but I know this is incorrect
使用STL列表更容易实现,如果是这样,那语法会是什么样的?
感谢我对矢量的帮助,所以任何建议都会受到赞赏。
答案 0 :(得分:0)
5.11
支持使用vector
运算符。语法和语义与使用[]
运算符和数组非常相似。请参阅:http://en.cppreference.com/w/cpp/container/vector/operator_at。
与任何struct成员一样,您需要按名称访问它。 []
。
给出的一般建议是使用myshapes[i].verts[j] = 4;
作为您选择的默认容器。当然,如果您有特殊需求(例如在容器中间添加/移除物品),其他容器可能具有更好的性能特征。
答案 1 :(得分:0)
如果你的向量开始是空的,你必须先添加元素,然后才能用operator[]
索引它们。这通常使用push_back
(添加现有shape
对象)或emplace_back
(直接在向量中构建新的shape
对象)来完成。
鉴于vector<shape> myshapes
,你可以添加一些这样的形状:
// add 10 shapes
for (size_t n = 0; n < 10; n++) {
shape s; // creates a new, blank shape object
// initialize the shape's data
s.type = ...;
s.shapeSize = ...;
// etc.
// add verts
s.verts.push_back(1.0f);
s.verts.push_back(2.0f);
s.verts.push_back(3.0f);
// etc.
// add the shape to the vector
myshapes.push_back(std::move(s));
}
(由于我们在最后一行完成了s
,我们可以使用std::move
。这样就可以push_back
将形状的数据移动到矢量而不是复制它。查找移动语义以获取更多信息。)
一旦你在向量中有东西,就可以按索引访问元素:
myshapes[index of shape].verts[index of vertex within that shape]
使用带有无效索引的[]
或向量为空时调用未定义的行为(不执行此操作或程序将崩溃/出现故障)。