QVector和vector的比较:

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()才检查越界。

 

构造函数:

Vector的构造函数C++98版:

  1. explicit vector (const allocator_type& alloc = allocator_type());
  1. explicit vector (size_type n, const value_type& val = value_type(),
  1.                  const allocator_type& alloc = allocator_type());
  1. template <class InputIterator>
  1.          vector (InputIterator first, InputIterator last,
  1.                  const allocator_type& alloc = allocator_type());
  1. vector (const vector& x);

C++11版:

  1. explicit vector (const allocator_type& alloc = allocator_type());
  1. explicit vector (size_type n);
  1.          vector (size_type n, const value_type& val,
  1.                  const allocator_type& alloc = allocator_type());
  1. template <class InputIterator>
  1.   vector (InputIterator first, InputIterator last,
  1.           const allocator_type& alloc = allocator_type());
  1. vector (const vector& x);
  1. vector (const vector& x, const allocator_type& alloc);
  1. vector (vector&& x);
  1. vector (vector&& x, const allocator_type& alloc);
  1. vector (initializer_list<value_type> il,
  1.        const allocator_type& alloc = allocator_type());

Qvector的构造函数:

QVector::QVector ()

QVector::QVector ( int size )

QVector::QVector ( int size, const T & value )

QVector::QVector ( const QVector<T> & other )

QVector::QVector ( std::initializer_list<T> args )

  1. 通过比较我们发现,vector可以指定内存分配器,而且Qvector少了类似template <class InputIterator>
  1.          vector (InputIterator first, InputIterator last,构造函数。所以以下代码是肯定不行的:

QVector<int> second (4,100);

QVector<int> third (second.begin(),second.end());

int myints[] = {16,2,77,29};

QVector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );

  1.  

迭代器:

  1. Vector迭代器begin C++98版本:
  1.      iterator begin();
  1. const_iterator begin() const;
  1. C++11版:
  1.   iterator begin() noexcept;
  1. const_iterator begin() const noexcept;
  1. noexcept指定这两个函数是不能抛出异常的。
  1.  
  1. Vector迭代器end C++98版本:
  1.     iterator end();
  1. const_iterator end() const;
  1. C++11版:
  1.       iterator end() noexcept;
  1. const_iterator end() const noexcept;
  1.  
  1. Vector迭代器rbegin C++98版本:
  1.         reverse_iterator rbegin();
  1. const_reverse_iterator rbegin() const;
  1. C++11版:
  1.    reverse_iterator rbegin() noexcept;
  1. const_reverse_iterator rbegin() const noexcept;
  1. noexcept指定这两个函数是不能抛出异常的。
  1.  
  1. Vector迭代器rend C++98版本:
  1. reverse_iterator rend();
  1. const_reverse_iterator rend() const
  1.  
  1. C++11版:
  1.    reverse_iterator rend() noexcept;
  1. const_reverse_iterator rend() const noexcept;
  1. 常量迭代器只要C++11版本的:
  1. const_iterator cbegin() const noexcept;
  1. const_iterator cend() const noexcept;
  1. const_reverse_iterator crbegin() const noexcept;
  1. const_reverse_iterator crend() const noexcept;
  1. Qvector的迭代器:
  1. iterator
  1. begin ()
  1. const_iterator
  1. begin () const
  1. const_iterator
  1. constBegin () const
  1. const_iterator
  1. constEnd () const
  1. iterator
  1. end ()
  1. const_iterator
  1. end () const
  1. Qvector没有反向迭代器。
  1.  

Vector有而Qvector没有的函数或功能:

  1. size_type max_size() const;
  1. 返回vector可以存在最大元素个数。
  1. void shrink_to_fit();   这个函数是C++11独有的
  1. 使得vector减少其容量为适合大小的容量。
  1. 赋值函数:
  1. C++98
  1. template <class InputIterator>
  1.   void assign (InputIterator first, InputIterator last);
  1. void assign (size_type n, const value_type& val);
  1. C++11
  1. template <class InputIterator>
  1.   void assign (InputIterator first, InputIterator last);
  1. void assign (size_type n, const value_type& val);
  1. void assign (initializer_list<value_type> il);
  1. 下面两个函数其实跟insert差不多
  1. template <class... Args>
  1. iterator emplace (const_iterator position, Args&&... args);
  1.  
  1. template <class... Args>
  1.   void emplace_back (Args&&... args);
  1.  
  1.  

Qvector有而vector没有的函数:

  1. int QVector::count ( const T & value ) const
  1. 返回Qvector中值为value的个数。
  1. bool QVector::contains ( const T & value ) const
  1. 判断Qvector中是否包含元素value,要求Qvector中的类型必须支持 比较操作==
  1. bool QVector::endsWith ( const T & value ) const
  1. 判断Qvector中是否以value值结尾。
  1. int QVector::indexOf ( const T & value, int from = 0 ) const
  1. int QVector::lastIndexOf ( const T & value, int from = -1 ) const
  1. QVector<T> QVector::mid ( int pos, int length = -1 ) const
  1. void QVector::squeeze ()
  1. 该函数释放不用的内存,类似于vectorvoid shrink_to_fit()
  1.  
  1. bool QVector::startsWith ( const T & value ) const
  1.  
  1. QList<T> QVector::toList () const
  1. std::vector<T> QVector::toStdVector () const
  1. QVector<T> QVector::fromList ( const QList<T> & list ) [static]
  1. QVector<T> QVector::fromStdVector ( const std::vector<T> & vector ) [static]
  1.  
  1. bool QVector::operator!= ( const QVector<T> & other ) const
  1. QVector<T> QVector::operator+ ( const QVector<T> & other ) const
  1. QVector<T> & QVector::operator+= ( const QVector<T> & other )
  1. QVector<T> & QVector::operator+= ( const T & value )
  1. QVector<T> & QVector::operator<< ( const T & value )
  1. QVector<T> & QVector::operator<< ( const QVector<T> & other )
  1. QVector<T> & QVector::operator= ( const QVector<T> & other )
  1. bool QVector::operator== ( const QVector<T> & other ) const
  1.  

QVector 和vector的比较的更多相关文章

  1. QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)

    QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...

  2. QVector&lt;QString&gt; 显示器里面的动态数组元素QString和char *转变

    QVector类是一类提供了动态数组模板. QVector<T>是Qt普通容器类的一种. 它将自己的每个对象存储在连续的内存中.能够使用索引號来高速訪问它们.QList<T>. ...

  3. 获取一个数组(vector)与查找值(value)的差最小绝对值的成员索引的算法

    代码如下: 函数作用:传递进来一个数组(vector),和一个需要查找的值(value),返回与value的差值绝对值最小的vector成员索引,若value不在vector范围中,则返回-1: in ...

  4. Qt之Concurrent框架

    简述 QtConcurrent命名空间提供了一个高级API来编写多线程程序,而无需使用低级线程原语,例如:互斥.读写锁.等待条件或信号量.使用QtConcurrent编写的程序使用的线程数量会自动根据 ...

  5. C++中的容器类详解

    一.STL容器类 STL(Standard Template Library)的六大组件:容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adap ...

  6. Qt Thread

    Threading Classes (Qt help manual key words) These Qt Core classes provide threading support to appl ...

  7. Understand the Qt containers(有对应表)

    Container classes are one of the cornerstones of object-oriented programming, invaluable tools that ...

  8. qwt

    一. 1.下载地址https://sourceforge.net/projects/qwt/ 2.注意:官方提供qt安装包creator都是用MSVC编译(包括mingW版)的,所以Creator的插 ...

  9. Qt4与Qt3的主要不同

    Qt4与Qt3的主要不同 1)QT4 中提供了大量新控件,虽然它也保持了旧的控件,并命名为Qt3XXX,但是这样的控件没准在今后的哪个QT版本中就不被支持了,所以还是换吧,控件替换的 工作是巨大的,这 ...

随机推荐

  1. sqlite3编译与查询

    1.sqlite3 http://www.sqlite.org/ 下载 wget http://www.sqlite.org/2014/sqlite-amalgamation-3080403.zip ...

  2. NOI2015 Day2

    NOI2015 Day2 荷马史诗 题目描述:给出\(n\)个数,要求\(n\)个\(k\)进制数来对应这\(k\)个数(允许有前导零),\(n\)个\(k\)进制数互不为前缀,求\(n\)个数乘以对 ...

  3. poj1543---完美立方(枚举)

    #include <stdio.h> #include <stdlib.h> int main() { int cube[101],n,i,a,b,c,d; for(i=1;i ...

  4. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(四)

    通过前面的操作,我们已经可以创建一个带有我们自己的PCI的watchdog外设qemu 虚拟机了. 目的: 1. 了解我们的外设情况. 2. 为在guest中开发我们自己的linux PCI驱动程序做 ...

  5. C++_enum

    C++的enum可以限制成员的类型 //error C2440: “=”: 无法从“int”转换为“color” #include <iostream> using namespace s ...

  6. 20140613_JavaWeb学习之开发环境配置篇

    本文所使用软件百度云盘网址:http://pan.baidu.com/s/1kTDRFwz 1安装JDK 操作系统:windows7-64bit 版本号:jdk-7u51-windows-x64 安装 ...

  7. FlashFXP使用教程

    点FlashFXP菜单栏“站点-站点管理”打开站点管理器.然后点新建站点,输入站点名称(随意),确定.   编辑站点管理器里新建的站点的相关信息,包括站点名称.地址.用户名称.密码等.编辑完成,点应用 ...

  8. JSP标签库

    step1: 定义一个标签处理类:改类必须实现SimpleTag接口,在实际中是拓展它的子类SimpleTagSupport.复写doTag方法 public class MyTag extends ...

  9. CI(-)框架结构

    一 CI 是什么 CodeIgniter is an Application Development Framework - a toolkit - for people who build web ...

  10. jQuery入门第二

    element选择器​ 在文具盒中,有铅笔.钢笔和水彩笔,类似于页面中的<div>.<span>各个元素,虽然同属于一个容器,但有各自的功能,jQuery中可以根据元素名查找元 ...