我有这个奇怪的问题
vector<unsigned int[3]> tris;
for (unsigned int i = 0; i < idx.size() - 2; i++) {
unsigned int push[] = {idx[i], idx[i+1], idx[i+2]};
tris.push_back(push); //<- this is where it goes belly up
}
代码片段应该将三角形条带索引列表解析为三角形索引,但不会在vs10下编译。想法?
答案 0 :(得分:20)
不,除非您将数组包装到struct
或使用类似std::array
的内容。
裸C风格的数组类型不可复制或可分配,这使得它没有资格作为标准容器元素。
P.S。应该注意的是,C ++ 11转而采用更精细的(按方法)方法来指定容器元素类型的需求,而不是C ++ 03使用的更广泛的方法。上述不合格性声明基于C ++ 03。我不准备说C ++ 11也是如此无条件......但如果你坚持在代码中使用push_back
,那么即使在C ++ 11中也是如此。
P.P.S。在C ++ 11中,人们可能会使用std::list
裸C样式数组并使用emplace
来构造新元素。但不是std::vector
。
答案 1 :(得分:11)
改为使用std::vector<std::array<unsigned, 3>>
。
答案 2 :(得分:0)
如果您使用的是C ++ 11,则可以使用元组。
std::vector < std::tuple< unsigned int, unsigned int, unsigned int > > tris;
https://stackoverflow.com/a/15734156/846686
不那么优雅&#39;解决方案可以是一对
std::vector < std::pair< unsigned int, std::pair<unsigned int, unsigned int> > tris;
但是可能会导致代码非常混乱......