【C++入门】C++ vector类
C++vector类
文章目录
- C++vector类
- 一、vector定义
- 二、容器特性
- 1.顺序序列
- 2.动态数组
- 3.能够感知内存分配器的(Allocator-aware)
- 三、基本成员函数
- 1.构造函数
- 2.增加函数
- 3.删除函数
- 4.遍历函数
- 5.大小和容量
- 6.其他函数
- 7.元素访问
- 四、vector 示例程序
一、vector定义
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
vector 是定义于名称空间 (namespace ) std 内的模板, 其定义在头文件 < vector > 中。其原型为:
template < class T, class Allocator = allocator < T >> class vector;
二、容器特性
1.顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
2.动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。
3.能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。
三、基本成员函数
1.构造函数
无参数 - 构造一个空的vector
vector<类型>();
数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector
vector<类型>( size_type num, const TYPE &val );
vector(from) - 构造一个与vector from 相同的vector
vector<类型>( const vector &from );
迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间元素的Vector(注:半开区间).
vector<类型>( input_iterator start, input_iterator end );
2.增加函数
向量尾部增加一个元素X
void push_back(const T& x);
向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,const T& x);
向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,int n,const T& x);
向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
iterator insert(iterator it,const_iterator first,const_iterator last);
3.删除函数
删除向量中迭代器指向元素
iterator erase(iterator it);
删除向量中[first,last)中元素
iterator erase(iterator first,iterator last);
删除向量中最后一个元素
void pop_back();
清空向量中所有元素
void clear();
4.遍历函数
返回向量头指针,指向第一个元素
iterator begin();
返回向量尾指针,指向向量最后一个元素的下一个位置
iterator end();
反向迭代器,指向最后一个元素
reverse_iterator rbegin();
反向迭代器,指向第一个元素之前的位置
reverse_iterator rend();
5.大小和容量
判断向量是否为空,若为空,则向量中无元素
bool empty() const;
返回向量中元素的个数
int size() const;
返回当前向量所能容纳的最大元素值
int capacity() const;
返回最大可允许的vector元素数量值
int max_size() const;
resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val
void resize( size_type size, TYPE val );
reserve()函数为当前vector预留至少共容纳size个元素的空间.
void reserve( size_type size );
6.其他函数
交换两个同类型向量的数据
void swap(vector&);
设置向量中前n个元素的值为x
void assign(int n,const T& x);
向量中[first,last)中元素设置成当前向量元素
void assign(const_iterator first,const_iterator last);
get_allocator() 函数返回当前vector的内存分配器.
allocator_type get_allocator();
7.元素访问
c[index]的返回值是引用类型。该函数既可以取出元素, 也可以对元素赋值,但必须 确定下标是有效的。
返回pos位置元素的引用
reference at(int pos);
返回首元素的引用
reference front();
返回尾元素的引用
reference back();
四、vector 示例程序
1.用vector实现二维数组
#include <iostream> #include <vector> using namespace std; int main() {vector<vector<int>> v(3);//v有3个元素,每个元素都是vector<int> 容器for (int i = 0; i < v.size(); ++i)for (int j = 0; j < 4; ++j)v[i].push_back(j);for (int i = 0; i < v.size(); ++i){for (int j = 0; j < v[i].size(); ++j)cout << v[i][j] << " ";cout << endl;}return 0; }
程序输出结果:
0 1 2 3
0 1 2 3
0 1 2 32.vector 示例程序
#include <iostream> #include <vector> using namespace std; template <class T> void PrintVector(T s, T e) {for (; s != e; ++s)cout << *s << " ";cout << endl; } int main() {int a[5] = {1, 2, 3, 4, 5};vector<int> v(a, a + 5); //将数组a的内容放入vcout << "1) " << v.end() - v.begin() << endl;//两个随机迭代器可以相减,输出 1) 5cout << "2) ";PrintVector(v.begin(), v.end());//2) 1 2 3 4 5v.insert(v.begin() + 2, 13); //在begin()+2位置插入 13cout << "3) ";PrintVector(v.begin(), v.end());//3) 1 2 13 3 4 5v.erase(v.begin() + 2); //删除位于 begin() + 2的元素cout << "4) ";PrintVector(v.begin(), v.end());//4) 1 2 3 4 5vector<int> v2(4, 100); //v2 有4个元素,都是100v2.insert(v2.begin(), v.begin() + 1, v.begin() + 3);//将v的一段插入v2开头cout << "5) v2: ";PrintVector(v2.begin(), v2.end());//5) v2: 2 3 100 100 100 100v.erase(v.begin() + 1, v.begin() + 3);//删除 v 上的一个区间,即 2,3cout << "6) ";PrintVector(v.begin(), v.end());//6) 1 4 5return 0; }
【C++入门】C++ vector类相关推荐
- 使用Vector类编程
一个array(数组)就像是把一套变量组织在一起的容器.单个数组可以含有许多不同的值.你可以储存和取得数组中的单个值(也就是数组elements(元素)).你也可以通过直接操作数组变量来成组地使用其值 ...
- C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)
1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...
- 【stanford C++】容器III——Vector类
主要介绍如下5个容器类--Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...
- java向量vector类,java数据结构——Vector(向量类)
Vector底层是用数组实现的,其容量是可以动态扩展的,默认初始容量是10,默认增长因子是0,详细的扩容方式会在构造方法中讲述. Vector对象和ArrayList一样可以随意插入不同类的对象,因为 ...
- Lucene4 入门(2)–Field类及辅助类说明
2019独角兽企业重金招聘Python工程师标准>>> Lucene4 入门(2)–Field类及辅助类说明 一.Eclipse中Field类的继承关系图: 二.Field类 1. ...
- 黑马程序员--打印流、序列输入流、Vector 类
--------- android培训.java培训.期待与您交流! --------- 1 打印流 打印流: 该流提供了打印方法,可以将各种数据类型的数据都原样打印. 字节打印流: PrintStr ...
- 利用std::allocator实现自定义的vector类
std::allocator即空间配置器,用于内存分配.更多的细节建议大家研究相关源码. 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正. 1 #inclu ...
- C++ vector类详解
转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...
- 【C++grammar】vector类和字符串字面量
C++的vector类 用数组存放数据时,容量大小不可变,vector对象容量可自动增大. vector的操作: 调用push_back函数时,vector对象的容量可能会增大. 观察下列操作对vec ...
最新文章
- 「鸡娃」是家长无处安放的「应试」焦虑
- springmvc二十三:日期格式化
- python+mysql:实现一千万条数据插入数据库
- 数据库mysql建立索引_为mysql数据库建立索引
- 网站搭建从零开始(一)域名
- JQuery ajax()实例
- 数据恢复软件(绝对真实可用)
- 中resource文件夹的作用_冲突与碰撞:OpenStack中的虚拟机和裸机
- [机器学习] 混淆矩阵和kappa系数
- 虚拟网站禁用php,PHP虚拟主机建议禁用函数列表
- Python-pyautogui qq自动发送消息,微信自动发送消息,适用于任何聊天窗口
- 【微信聊天机器人】基于python实现的PC端个人微信聊天机器人
- 【数学建模】模型的评价、模型的推广与改进
- Element-Ui组件 Radio 单选框 修改点击激活时的文本颜色,填充色和边框色
- ps cs6选择并遮住在哪设置
- 外贸SOHO如何收款-跨境知道
- Python爬取‘跌妈不认’股票数据,绘制可视化图
- “上升”华为碰撞“下降”联想
- 利用 RDP Wrapper 实现 Android 平板变身 Windows 平板
- 关于webpack下载loader时遇到的问题
热门文章
- 阿里云服务器如何快速搭建Docker环境
- java对象复制_Java对象的深层复制与浅层复制
- python精确有理数实验_Python3标准库:fractions有理数
- c语言游戏角色建立,(c语言)游戏中由人物各种信息组成的结构体
- pythoncontinue函数_Python continue语句
- IntelliJ IDEA 快捷键 Windows
- python中unitest_基于Python的unitest框架介绍
- win7关闭开机启动项_电脑开机非常慢?原来是有软件偷偷自启动,教你一招彻底关闭它们...
- c++ map初始化_Java多线程 未完成初始化--构造方法中新建线程
- 对于计算机专业的调查报告,计算机专业调查报告.doc