无法制作固定大小数组的矢量?

时间:2013-06-06 19:32:05

标签: c++

我有这个奇怪的问题

    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下编译。想法?

3 个答案:

答案 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;

但是可能会导致代码非常混乱......

相关问题