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

Jak*_*der 11 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
    }
Run Code Online (Sandbox Code Playgroud)

代码片段应该将三角形条带索引列表解析为三角形索引,但不会在vs10下编译.思考?

AnT*_*AnT 20

不,除非你将数组包装成struct或使用类似的东西std::array.

裸C样式数组类型不可复制或可分配,这使得它不适合用作标准容器元素.

PS应该注意的是,C++ 11转而采用更精细的(按方法)方法来指定容器元素类型的要求,而不是C++ 03使用的更广泛的方法.上述不合格性声明基于C++ 03.我还没准备好说它对C++ 11来说也是如此无条件......但是如果你坚持push_back在你的代码中使用它,即使在C++ 11中也是如此.

PPS在C++ 11中,人们可以使用std::list裸C样式数组并使用emplace构建新元素.但不是std::vector.


Jur*_*aho 11

std::vector<std::array<unsigned, 3>>改用.