QVector与std::vector对比

前言

  在使用Qt开发Windows软件的情况下,软件开发者可以选择Qt提供的容器以及STL中的容器,这里我们以QVector与vector为例,告诉读者两种容器的区别,以及使用哪一种容器更为合理。笔者认为这取决于你希望如何优化你的软件;当你更在意的是效率时,笔者建议你使用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;
	qvec.push_back(a);
	system("pause");
	return 0;
}

  使用vector时,只进行了一次复制构造和而使用QVector时进行了两次复制构造。

不同点对比

  QVector具有隐式共享而vector不具备,QVector中不论时使用at()还是operator都会检查越界问题,而vector中operator[]不检查越界,at( )才检查越界。

补充说明

  关于vector的更多资料,你可以访问C/C++参考网站
  关于QVector的更多资料,你可以访问Qt官网
  如果以上描述仍不足以解答你的疑惑,请联系我的邮箱707101557@qq.com。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐