2014-10-29 167 views
3

我在QT下面的变量:QVector <QVector int>>修改 “内部” 矢量

QVector<QVector <int> > buff_d1; 

和我需要修改 “内部” 载体:

buff_d1.at(i).removeFirst(); 
buff_d1.at(i).push_back(d1.at(i).at(sample_number)); 

这导致错误:

passing 'const QVector<int>' as 'this' argument of 'void QVector<T>::removeFirst() [with T = int]' discards qualifiers [-fpermissive] buff_d2.at(i).removeFirst(); 
    passing 'const QVector<int>' as 'this' argument of 'void QVector<T>::push_back(const T&) [with T = int]' discards qualifiers [-fpermissive] buff_d1.at(i).push_back(d1.at(i).at(sample_number)); 

我明白“内部”向量是常量,所以我不能修改它,但围绕它的工作是什么?

回答

1

at(int index)成员函数返回一个const引用,请参阅文档here,因此您需要使用operator[int index]来返回非const引用才能修改它。

4

at()函数返回一个const参考:

const T & QVector::at(int i) const 

和你想用removeFirst()功能进行修改。你还是使用[] operator来修改它,因为它提供了一个非const返回过载:

T & QVector::operator[](int i) 

这同样适用于第二个错误。

+1

或[value(int at)](http://qt-project.org/doc/qt-5/qvector.html#value)。 'at'方法用于防止创建深层副本(例如,在遍历向量时)。 – 2014-10-29 13:13:16