QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)
QVector和vector的比较:
https://www.cnblogs.com/findumars/p/5176062.html
Qvector默认使用隐式共享,可以用setSharable改变其隐式共享。使用non-const操作和函数将引起深拷贝。at()比operator[](),快,因为它不进行深拷贝.Qvector取值都会检查越界问题。
看看简单的例子:
QVector<int> vecA;
QVector<int> vecB;
vecA.push_back(1);
vecA.push_back(10);
vecB= vecA;
cout<<"&vecA.at(0) : "<<&vecA.at(0)<<endl;
cout<<"&vecB.at(0) : "<<&vecB.at(0)<<endl;
 
QVector<int> vecC;
vecA.setSharable(false);
vecC = vecA;
cout<<"&vecA.at(0): "<<&vecA.at(0)<<endl;
cout<<"&vecC.at(0): "<<&vecC.at(0)<<endl;
 
对比发现,禁用了隐式共享之后,元素的地址就不再一样了。
Vector
Vector没有隐式共享,operator [ ]不检查越界,at()才检查越界。
#include <QCoreApplication> #include <QVector> #include <iostream> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); { QVector<int> vecA; QVector<int> vecB; vecA.push_back(1); vecA.push_back(10); vecB= vecA; cout<<"&vecA.at(0) : "<<&vecA.at(0)<<endl; cout<<"&vecB.at(0) : "<<&vecB.at(0)<<endl; cout<<"vecA.at(0) : "<<vecA.at(0)<<endl; cout<<"vecB.at(0) : "<<vecB.at(0)<<endl; vecA[0]=5; cout<<"vecA.at(0) : "<<vecA.at(0)<<endl; cout<<"vecB.at(0) : "<<vecB.at(0)<<endl; cout<<"&vecA.at(0) : "<<&vecA.at(0)<<endl; cout<<"&vecB.at(0) : "<<&vecB.at(0)<<endl; } cout<<"------------------------------"<<endl; { QVector<int> vecA; vecA.push_back(1); vecA.push_back(10); QVector<int> vecC; vecA.setSharable(false); vecC = vecA; cout<<"&vecA.at(0): "<<&vecA.at(0)<<endl; cout<<"&vecC.at(0): "<<&vecC.at(0)<<endl; cout<<"vecA.at(0): "<<vecA.at(0)<<endl; cout<<"vecC.at(0): "<<vecC.at(0)<<endl; vecA[0]=5; cout<<"vecA.at(0) : "<<vecA.at(0)<<endl; cout<<"vecC.at(0) : "<<vecC.at(0)<<endl; cout<<"&vecA.at(0): "<<&vecA.at(0)<<endl; cout<<"&vecC.at(0): "<<&vecC.at(0)<<endl; } return a.exec(); }
&vecA.at(0) : 000E9A80 &vecB.at(0) : 000E9A80 vecA.at(0) : 1 vecB.at(0) : 1 vecA.at(0) : 5 vecB.at(0) : 1 &vecA.at(0) : 000E9AD0 &vecB.at(0) : 000E9A80 ------------------------------ &vecA.at(0): 000E9AD0 &vecC.at(0): 000E1D90 vecA.at(0): 1 vecC.at(0): 1 vecA.at(0) : 5 vecC.at(0) : 1 &vecA.at(0): 000E9AD0 &vecC.at(0): 000E1D90

 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号