QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)
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版:
explicit vector (const allocator_type& alloc = allocator_type());
explicit vector (size_type n, const value_type& val = value_type(),
const allocator_type& alloc = allocator_type());
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
vector (const vector& x);
C++11版:
explicit vector (const allocator_type& alloc = allocator_type());
explicit vector (size_type n);
vector (size_type n, const value_type& val,
const allocator_type& alloc = allocator_type());
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
vector (const vector& x);
vector (const vector& x, const allocator_type& alloc);
vector (vector&& x);
vector (vector&& x, const allocator_type& alloc);
vector (initializer_list<value_type> il,
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 )
通过比较我们发现,vector可以指定内存分配器,而且Qvector少了类似template <class InputIterator>
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) );
迭代器:
Vector迭代器begin C++98版本:
iterator begin();
const_iterator begin() const;
C++11版:
iterator begin() noexcept;
const_iterator begin() const noexcept;
noexcept指定这两个函数是不能抛出异常的。
Vector迭代器end C++98版本:
iterator end();
const_iterator end() const;
C++11版:
iterator end() noexcept;
const_iterator end() const noexcept;
Vector迭代器rbegin C++98版本:
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
C++11版:
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
noexcept指定这两个函数是不能抛出异常的。
Vector迭代器rend C++98版本:
reverse_iterator rend();
const_reverse_iterator rend() const
C++11版:
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
常量迭代器只要C++11版本的:
const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;
Qvector的迭代器:
iterator |
begin () |
const_iterator |
begin () const |
const_iterator |
constBegin () const |
const_iterator |
constEnd () const |
iterator |
end () |
const_iterator |
end () const |
Qvector没有反向迭代器。
Vector有而Qvector没有的函数或功能:
size_type max_size() const;
返回vector可以存在最大元素个数。
void shrink_to_fit(); 这个函数是C++11独有的
使得vector减少其容量为适合大小的容量。
赋值函数:
C++98:
template <class InputIterator>
void assign (InputIterator first, InputIterator last);
void assign (size_type n, const value_type& val);
C++11:
template <class InputIterator>
void assign (InputIterator first, InputIterator last);
void assign (size_type n, const value_type& val);
void assign (initializer_list<value_type> il);
下面两个函数其实跟insert差不多
template <class... Args>
iterator emplace (const_iterator position, Args&&... args);
template <class... Args>
void emplace_back (Args&&... args);
Qvector有而vector没有的函数:
int QVector::count ( const T & value ) const
返回Qvector中值为value的个数。
bool QVector::contains ( const T & value ) const
判断Qvector中是否包含元素value,要求Qvector中的类型必须支持 比较操作==
bool QVector::endsWith ( const T & value ) const
判断Qvector中是否以value值结尾。
int QVector::indexOf ( const T & value, int from = 0 ) const
int QVector::lastIndexOf ( const T & value, int from = -1 ) const
QVector<T> QVector::mid ( int pos, int length = -1 ) const
void QVector::squeeze ()
该函数释放不用的内存,类似于vector的void shrink_to_fit()
bool QVector::startsWith ( const T & value ) const
QList<T> QVector::toList () const
std::vector<T> QVector::toStdVector () const
QVector<T> QVector::fromList ( const QList<T> & list ) [static]
QVector<T> QVector::fromStdVector ( const std::vector<T> & vector ) [static]
bool QVector::operator!= ( const QVector<T> & other ) const
QVector<T> QVector::operator+ ( const QVector<T> & other ) const
QVector<T> & QVector::operator+= ( const QVector<T> & other )
QVector<T> & QVector::operator+= ( const T & value )
QVector<T> & QVector::operator<< ( const T & value )
QVector<T> & QVector::operator<< ( const QVector<T> & other )
QVector<T> & QVector::operator= ( const QVector<T> & other )
bool QVector::operator== ( const QVector<T> & other ) const http://blog.csdn.net/hai200501019/article/details/11713519
QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)的更多相关文章
- QVector 和vector的比较
QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...
- QVector也是隐式数据共享的
Behind the scenes, QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid ...
- 警告: 隐式声明与内建函数‘exit’不兼容 [默认启用]
警告: 隐式声明与内建函数‘exit’不兼容 [默认启用] 最近在学习linux下的多任务编程,用到exit等函数时,经常出现该警告,查找资料后发现,原因其实很简单,没有把stdlib.h头文件包含进 ...
- MYSQL中默认隐式事务及利用事务DML
一:默认情况下,MySQL采用autocommit模式运行.这意味着,当您执行一个用于更新(修改)表的语句之后,MySQL立刻把更新存储到磁盘中.默认级别为不可重复读. 二:会造成隐式提交的语句以下语 ...
- 继承:继承后子类构造函数具有隐式super,所以子类中所以的构造函数默认会访问父类中的空参数的构造函数
class Test { Test(){ System.out.println("Test"); } Test(String name){ System.out.println(& ...
- C++中:默认构造函数、析构函数、拷贝构造函数和赋值函数——转
对于一个空类,编译器默认产生4个成员函数:默认构造函数.析构函数.拷贝构造函数和赋值函数.1.构造函数:构造函数是一种特殊的类成员,是当创建一个类的时候,它被调用来对类的数据成员进行初始化和分配内存. ...
- js 五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解
壹 ❀ 引 可以说this与闭包.原型链一样,属于JavaScript开发中老生常谈的问题了,百度一搜,this相关的文章铺天盖地.可开发好几年,被几道this题安排明明白白的人应该不在少数(我就是 ...
- JS五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解(转载)
目录 壹 ❀ 引 贰 ❀ this默认绑定 叁 ❀ this隐式绑定 1.隐式绑定 2.隐式丢失 肆 ❀ this显式绑定 伍 ❀ new绑定 陆 ❀ this绑定优先级 柒 ❀ 箭头函数的this ...
- 8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系
一. PropTypes 与 DefaultProps 官方文档 1. PropTypes 属性校验 引入 PropTypes import PropTypes from 'prop-types'; ...
随机推荐
- WRTnode 的 HTTP Web PWM 调光实验(2016-05-16)
前言 这里是节取自 物联网的任意门——WRTnode2R 评测 中的 http web PWM 调光灯实验,所以有一些前置设置如果没有描述清楚可参考该处. 正文 步骤一:编辑 html 文件放在 /w ...
- BZOJ 1711: [Usaco2007 Open]Dingin吃饭( 最大流 )
将牛拆成两个点 i 和 i' 并连弧 , S 向每种 food 连边 , 每种 drink 向 T 连边 , 每种 food 向喜欢他的 cow 连边 到 i , 每种 drink 从喜欢它的 cow ...
- thinkphp第二天
1.使用print_r();打印数组的时候最好使用<pre>标签,可以是数组表现的更加直观. pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本 ...
- JS拖动浮动DIV
<!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>j ...
- REF CURSOR和CURSOR
REF CURSOR DECLARE TYPE TY_EMP_CUR IS REF CURSOR; V_Emp_Cur TY_EMP_CUR; V_Id EMP.ID%TYPE; BEGIN OPEN ...
- Introduction to REST #Reprinted#
from http://www.cnblogs.com/shanyou/archive/2012/05/12/2496959.html dudu的 HttpClient + ASP.NET Web A ...
- ASP.NET jQuery 随笔 在TextBox里面阻止复制、剪切和粘贴事件
当用户要输入一些密码.信用卡信息和银行账号等敏感信息,用户更希望手工通过键盘敲入数据,而好过通过剪贴板复制粘贴. 我们先来看下实现后的效果: <%@ Page Language="C# ...
- poj 2833 The Average(堆)
题目链接:http://poj.org/problem?id=2833 思路分析:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序.考虑维护一个最大堆与最小堆,依次读取数据, 记录数据 ...
- iOS开发- 打包ipa,让别人设备安装你的App
一般在接外包的时候, 通常第三方须要安装你的app进行測试(这时候你的app肯定是还没传到app store之前). 这样的情况下.假设是企业账号就好办了, 随便安装.. 可是个人开发人员账号呢? 假 ...
- Ceph之数据分布:CRUSH算法与一致性Hash
转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以 ...