STL学习笔记1--vector
C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合。包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等。STL提供了以下三类数据结构的实现:
标准容器类:
vector | 从后面快速插入和删除,直接访问任何元素 |
deque | 从前面或后面快速插入和删除,直接访问任何元素 |
list | 双链表,从任何地方快速插入和删除 |
statck | 后进先出 |
queue | 先进后出 |
priority_queue | 最高优先级元素总是第一个出列 |
set | 快速查找,不允许重复值 |
multiset | 快速查找,允许重复值 |
map | 一对多映射,基于关键字快速查找,不允许重复值 |
multimap | 一对多映射,基于关键字快速查找,允许重复值 |
现在开始具体解释:
1、vector
vector容器就相当于一个数组,但其大小可以不可预先指定,并且自动扩展,完全可以把它看成一个动态数组。在创建一个vector后,它会在内存中分配一块连续的内存空间进行数据存储,初始的大小可以预先制定也可以由vector默认指定。当内存使用完后它会自动增加内存。并且这个过程比较耗时,如下:
首先,vector 会申请一块更大的内存块;
然后,将原来的数据拷贝到新的内存块中;
其次,销毁掉原内存块中的对象(调用对象的析构函数);
最后,将原来的内存空间释放掉。
构造函数
vector<int> v1; //构造一个空的vector
vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector
常用函数
at() 返回指定位置的元素
push_back() 在Vector最后添加一个元素
size() 返回Vector元素数量的大小
代码示例如下:其中一定要包含头文件vector
//vector.cpp
#include "vector"
#include "iostream"
using namespace std; int main()
{
vector <int> arr;//声明一个元素类型为int的容器
for (int i=;i<arr.size();i++)//size()返回当前容器的元素个数
{
arr.push_back(i);//向容器末尾添加元素
}
for (int i=;i<;i++)
{
cout<<arr.at(i)<<"\t";//获取指定位置的元素的值
}
getchar();
return ;
}
resize() 改变Vector元素数量的大小
void resize( size_type size, TYPE val ); //改变当前vector的大小为size,且对新创建的元素赋值val
arr.resize(,);//改变当前vector的大小为20,且对新创建的元素赋值22
back() 返回最末一个元素 ,如下:
cout<<arr.back()<<endl;//取最后一个元素输出
capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
cout<<arr.capacity()<<endl;// 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
empty() 判断Vector是否为空(返回true时为空)
if(arr.empty())//判断Vector是否为空(返回true时为空)
{
cout<<"vector is empty!";
}
else
cout<<"vector is not empty!";
clear() 清空所有元素
arr.clear();//清空所有元素,之后可以判断一下是否清空
max_size() 返回Vector所能容纳元素的最大数量(上限)
cout<<"Vector所能容纳元素的最大数量(上限) :"<<arr.max_size()<<endl;//Vector所能容纳元素的最大数量(上限)
swap() 交换两个Vector ,经过测试,两个容器的大小对交换结果没有影响,不论谁大,都不影响。
swap(arr,arr2);//交换两个容器中的内容
pop_back() 移除最后一个元素
arr.pop_back();//移除最后一个元素
front() 返回第一个元素的引用
cout<<arr.front()<<endl;//front() 返回第一个元素的引用
begin() 返回第一个元素的迭代器
end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
insert() 插入元素到Vector中
iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val ); //在指定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素
erase() 删除指定元素
iterator erase( iterator loc );//删除loc处的元素
iterator erase( iterator start, iterator end );//删除start和end之间的元素
vector <int>::iterator it;//声明一个迭代器
it = arr.begin();//指向第一个元素的迭代器
arr.erase(it);//删除指定位置的元素
// arr.erase(it,it+4);//删除某一区间的元素
for (int i=;i< arr.size();i++)
{
cout<<arr.at(i)<<"\t";// 返回指定位置的元素
}
cout<<endl;
it = arr.begin();
// arr.insert(it,0);//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
arr.insert(it,,); //在指定位置it前插入3个值为99的元素
for (int i=;i< arr.size();i++)
{
cout<<arr.at(i)<<"\t";// 返回指定位置的元素
}
reserve() 设置Vector最小的元素容纳数量
arr.reserve();//为当前vector预留至少共容纳size个元素的空间
STL学习笔记1--vector的更多相关文章
- STL学习笔记(二) vector和string
条款13:vector.string优先于动态分配数组 string是basic_string<char>的类型定义许多string的背后实现都采用了引用计数的技术,可以消除不必要的内存拷 ...
- 【stl学习笔记】vector
vector是定义于namespace std内的template: namespace std { template<class T, class Allocator = allocator& ...
- Effective STL 学习笔记: 多用 vector & string
Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
随机推荐
- [转] java实现https请求
package com.lichmama.test.util; import java.io.ByteArrayOutputStream; import java.io.IOException; im ...
- Java基础语法(练习)
Java基础语法 今日内容介绍 u 循环练习 u 数组方法练习 第1章 循环练习 1.1 编写程序求 1+3+5+7+……+99 的和值. 题目分析: 通过观察发现,本题目要实现的奇数(范围1-100 ...
- 深入JVM内核---原理,诊断与优化
JVM的概念 JAM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统 有哪些虚拟机 - V ...
- 关于Kettle的事务和转换内步骤的顺序执行
关于Kettle的事务和转换内步骤的顺序执行 近来有项目中遇到Kettle事务处理和转换内步骤顺序执行的问题.为此进行了研究,找到了一个解决办法. 在Kettle中,一个Job内的转换,缺省是顺序执行 ...
- PHP针对二维数组无限遍历变形研究
一.需要变形的二维数组 $arr = Array( Array ( 'material_id' => 1, 'material_name' => '铜板纸', 'parent_id' =& ...
- python 之正则表达式
一.正则表达式 首先,我们需要感性的了解下什么是正则表达式,简单的是说“正则表达式”就是一个“表达式”,更准确定义是:“用一个简洁的方法来实现对“一组字符串”的表达式. 最终目的就是实现“一行胜千言” ...
- ZOJ 3471 Most Powerful (状压DP,经典)
题意: 有n个原子,每当两个原子碰撞时就会产生能量,并且消耗其中一个原子.已知每两个原子碰撞时消耗其中指定一个原子所产生的能量,问最多能产生多少能量? 思路: 一开始以为是找一个有序序列,使得能量最大 ...
- Android系统Binder机制学习总结
一.Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的机制有很多种,比如说socket.pipe等,Android中进程间通信的方式主要有三 ...
- UVA 11853 - Paintball 战场(dfs)
题意:有n个敌人,每个敌人有一个攻击范围,问你是否存在从西边到东边的路径,如果存在,输出入点和出点最靠北的坐标. 把每个敌人看出一个圆,从上往下跑dfs连通,如果到达底部,那么无解.要求出最靠北的坐标 ...
- java基础—注解annotation
一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...