vector 初始化所有方法
简介:vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适。
vector是连续内存容器,换句话说,标准要求所有标准库实现的时候,vector中的元素的内存必须是连续的。所以对于插入和删除的时间复杂度是很高的,因为删除或者插入的时候,需要元素的移动,即元素复制拷贝。
vector的内部实现一般需要用到placement new ,所以效率很高,因为很多的时候,只要我们是使用得到,就可以省去很多的内存分配开销。而且vector的使用,元素可以没有默认的构造函数,但是需要拷贝构造函数的存在,这是使用CArray所无法实现的。
使用原则:
- 尽量使用vector代替C风格的数组或者CArray;
- 尽量使用算法代替手工写的循环;
- 尽量使用vector本身的函数代替其他泛型算法;
vector的接口很容易看懂和使用,这里以一些例子来说明vector的用法。
1,填充vector
如果我们想用原始数组的内容填充vector,那么于有很多种方式。我们来一次学习vector的几个方法。
例如我们有数组int v1[10] = {0,1,0,0,3,0,0,4,4,4};
初始化方式1:
1 |
vector<int> v2(10); //初始化size为10可以避免数组动态增长的时候不断的分配内存 |
2 |
//v2.reserve(10);//同上,只要使用其中一个就可以了 |
3 |
for( int i=0; i<10; i++ ) |
4 |
{ |
5 |
v2.push_back(v1[i]);//增加一个元素 |
6 |
} |
初始化方式2:
1 |
vector<int> v3(&v1[0],&v1[9]);//原始数组的元素指针可以作为迭代器来使用 |
初始化方式3:
1 |
vector<int> v4; |
2 |
v4.reserve(10); |
3 |
v4.insert(v4.begin(), &v1[0], &v[9]); |
初始化方式4:
1 |
vector<int> v5(10); |
2 |
copy(v5.begin(), &v1[0], &v1[9]); |
原始数组的元素指针可以作为迭代器来使用。
原则:尽量使用reserve来减少不必要的内存分配次数。
原则:尽量使用empty而不是size()==0 来判断容器是否为空
有可能我们需要在vector中插入相应的元素
1 |
vector<int>::iterator i = find( v1.begin(), v1.end(), 3); |
2 |
if( i != v1.end() ) |
3 |
{ |
4 |
v1.insert( i, 6 ); |
5 |
} |
原创文章,转载请注明: 转载自C/C++程序员之家
本文链接地址: STL之vector的使用一(初始化vector)
vector 初始化所有方法的更多相关文章
- C++-二维vector初始化大小方法-备忘
来源: C++——二维vector初始化大小方法 1.直接用初始化方法 名字为vec,大小为n*m,初始值为0的二维vector. vector<vector<)); 2.用resize( ...
- C++——二维vector初始化大小方法
初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...
- C++的vector的使用方法
vector c++的vector的使用方法,创建,初始化,插入,删除等. #include "ex_vector.h" #include <iostream> #in ...
- (转载) jQuery 页面加载初始化的方法有3种
jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...
- ios 上浏览器返回上一页不会刷新页面问题,页面初始化的方法不执行
https://blog.csdn.net/yang450712123/article/details/79276102 https://blog.csdn.net/Chengbin_Huang/ar ...
- Linux_服务器_05_CentOS 7安装完成后初始化的方法_Linux
参考资料 1.CentOS 7安装完成后初始化的方法_Linux
- 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)
之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中.vector A中的结果我们可想而知,可是vector B中的元素还会怎样? 看看之前写过的程序: ...
- Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别
本篇博客主要讲解List接口的三个实现类ArrayList.LinkedList.Vector的使用方法以及三者之间的区别. 1. ArrayList使用 ArrayList是List接口最常用的实现 ...
- Spring源码学习(六)-spring初始化回调方法源码学习
1.spring官方指定了三种初始化回调方法 1.1.@PostConstruct.@PreDestory 1.2.实现 InitializingBean DisposableBean 接口 1.3. ...
随机推荐
- Codeforces Gym 100187K K. Perpetuum Mobile 构造
K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
- android MVC
Android 的官方建议应用程序的开发采用MVC 模式.何谓MVC? MVC 是Model,View,Controller 的缩写,从上图可以看出MVC 包含三个部分: 模型(Model)对象:是应 ...
- unity button
#pragma strict var buttonTexture:Texture2D; private var str:String; private var frameTime:int; funct ...
- ssh org.springframework.beans.TypeMismatchException
这个问题我搜了一上午都木有解决 后来找到一个英文网站 It seems that some other bean (one that is not shown) has a property of t ...
- cocos2d 中判断CGPoint或者CGSize是否相等
cocos2d 中判断CGPoint是否相等 调用CGPointEqualToPoint(point1, point2) 判断CGSize是否相等 调用CGSizeEqualToSize(size1, ...
- hiho#1145 : 幻想乡的日常
描述 幻想乡一共有n处居所,编号从1到n.这些居所被n-1条边连起来,形成了一个树形的结构. 每处居所都居住着一个小精灵.每天小精灵们都会选出一个区间[l,r],居所编号在这个区间内的小精灵一起来完成 ...
- SQL Server DATEPART() 函数
定义和用法 DATEPART() 函数用于返回日期/时间的单独部分,比如年.月.日.小时.分钟等等. 语法 DATEPART(datepart,date) date 参数是合法的日期表达式.datep ...
- 使用distinct出现的一个问题
如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中. 错误的写法:select distinct top 100 userphone from m ...
- elFinder的使用并整合ckeditor
具体实现访问: 白乔大神资源:https://github.com/bluejoe2008/elfinder-2.x-servlet 本人oschina的库:https://git.oschina.n ...
- Leetcode | Valid Sudoku & Sudoku Solver
判断valid,没有更好的方法,只能brute force. class Solution { public: bool isValidSudoku(vector<vector<char& ...