QVector與std::vector對比

2020-08-08 13:19:52

@[TOC](QVector與std::vector對比)

前言

  Qt與STL都提供了諸如QVector之類的容器,在軟件開發的過程中,應該使用哪一種容器更爲合理呢?筆者認爲這取決於你希望如何優化你的軟體;當你更在意的是效率時,筆者建議你使用vector;但當你更在意的是安全時,筆者建議你使用QVector。當今的計算機已經足夠強大,在使用容器時,筆者建議你使用QVector。

實驗

  vector和QVector都是通過複製建構函式新增物件,但當你執行push_back時,你會發現,vector只調用了一次複製建構函式,而QVector呼叫了兩次複製建構函式。
  程式碼

#include <iostream>
#include <QtCore/QVector>

using namespace std;

class A
{
public:
	A()
	{
		cout << "A()" << endl;
	}

	A(const A& a)   // 增加拷貝建構函式
	{
		cout << "copy A()" << endl;
	}
	~A()
	{
		cout << "~A()" << endl;
	}
public:
	int v;
};

int main()
{
	A a;
	vector<A> vec;
	cout << "vector test" << endl;
	vec.push_back(a);
	QVector<A> qvec;
	cout << "qvector test" << endl;
	vec.push_back(a);
	system("pause");
	return 0;
}

  結果
在这里插入图片描述

不同點對比

  QVector具有隱式共用而vector不具備,QVector中不論時使用at()還是operator都會檢查越界問題,而vector中operator[]不檢查越界,at( )才檢查越界。

補充說明

  關於vector的更多資料,你可以存取C/C++參考網站
  關於QVector的更多資料,你可以存取Qt官網
  如果以上描述仍不足以解答你的疑惑,請聯繫我的郵箱[email protected]