Qt 如何使用QVector作为二维数组?

Qt 如何使用QVector作为二维数组?,qt,vector,multidimensional-array,Qt,Vector,Multidimensional Array,如何将QVector声明、初始化和赋值为二维数组?方法与std::vector相同: QVector< QVector< int > > twoDArray; // Empty. QVector< QVector< int > > twoDArray( 2 ); // Contains two int arrays. twoDArray[0].resize(4); twoDArray[0][2] = 4; // Assign to th

如何将
QVector
声明、初始化和赋值为二维数组?

方法与
std::vector
相同:

QVector< QVector< int > > twoDArray;      // Empty.
QVector< QVector< int > > twoDArray( 2 ); // Contains two int arrays.
twoDArray[0].resize(4);
twoDArray[0][2] = 4;  // Assign to the third element of the first array.
...
etc...
QVector>twoDArray;//空的。
QVector>twoDArray(2);//包含两个int数组。
twoDArray[0]。调整大小(4);
twoDArray[0][2]=4;//分配给第一个数组的第三个元素。
...
等

为了避免嵌套向量,您可以将二维索引空间映射到一维索引空间,至少如果您有一些(恒定)“宽度”,这是x坐标的上限:

int index(int x, int y) {
    return x + width * y;
}
然后使用此项对
width*height
size的向量进行索引:

QVector<...> vector(width * height);
vector[index(5, 3)] = ...;
QVector向量(宽*高);
向量[指数(5,3)]=。。。;

当程序到达分配状态时,程序意外完成。CMannett85 bro请检查一下,它会导致意外完成什么?我不知道你写了什么。上面的代码不是一个连续的块,它们只是随机使用的例子@Cmannet85我认为他使用了您的示例,但出现了一个错误,因为twoDArray没有第三个元素可分配。@sai您没有设置向量的大小,您正在创建一个空的向量,然后拨入它-这将导致segfault<代码>QVector>点(10,QVector(5))应正确初始化,请阅读文档。您会推荐这种做法吗?这看起来真的很好。将它传递给一个函数会迫使你也将宽度和高度作为参数??至少是宽度(因为在公式中这是索引它所必需的)。我建议传递一个
QSize
,它可以方便地封装宽度和高度。当您有C++11 lambda可用时,另一个允许更大灵活性的选项是代替向量传递
std::function
(其中
Type
是向量应该持有的类型),它以
x,y
的形式传递索引,并在您喜欢的任何数据结构中返回引用。然后调用这样的函数:
doSomething([=](intx,inty){returnmydata[x*width+y];})当然,它看起来很复杂,但非常灵活。