我很想得到一个指向QVector
元素的指针,这样我就可以在其他地方使用该对象,但是该at()
方法给了我一个const T&
值,并且operator[]
给了我一个T&
值。
我对如何使用这些来获取指针感到困惑,以便我将使用相同的对象而不是使用复制构造函数。
值T&
不是副本,它是引用。
引用看起来很像指针:它们很轻,可以用来修改底层对象。只是,您使用它们的语法与直接对象相同(使用点而不是箭头),以及您可能希望在文章中查看的其他一些差异。
要编辑当前在 Vector 中的对象,您可以使用例如vector[i].action();
. 这将从向量内的对象调用 action() 方法,而不是在副本上。您还可以将引用移交给其他函数(前提是它们带有引用参数),它们仍将指向同一个对象。
您还可以从引用中获取对象的地址:Object* pObject = & vector[i];
并将其用作任何指针。
如果您确实需要指向对象的指针,您还可以使用指针向量:QVector<Object*> vector;
但是,这需要您处理创建/销毁,而对象向量则不需要。
现在,如果你想要一个指向 Vector 本身的指针,只需执行QVector<Object> *pVector = &vector;
QVector::operator[]
returns a reference to the element at the given index. A reference is modifiable if it isn't a const reference, what is returned by QVector::at()
.
You can simply modify the element by assigning a new value or using a modifying member of the object, like in the following examples:
// vector of primitive types:
QVector<int> vector;
vector.append(3);
vector.append(5);
vector.append(7);
vector[0] = 2; // vector[0] is now 2
vector[1]++; // vector[1] is now 6
vector[2] -= 4; // vector[2] is now 3
// vector of objects:
QVector<QString> strings;
strings.append(QString("test"));
strings[0].append("ing"); // strings[0] is now "testing"
QMap
and QHash
even support operator[]
for non-existing keys, which makes the folliowing possible:
QMap<int, int> map;
map[0] = 4;
map[3] = 5;
One disadvantage of operator[]
is that the entry gets created if it didn't exist before:
// before: map contains entries with key 0 and 3
int myEntry = map[2]; // myEntry is now 0
// after: map contains entries with keys 0, 2 and 3