STL9-vector容器
vector容器 动态数组 可变数组
vector容器 单口容器
vector实现动态增长:
当插入新元素时,如果空间不足,那么vector会重新申请更大内存空间(默认二倍),将原空间数据拷贝到新空间,释放旧空间的数据,再把新元素插入新申请空间。
当我们知道我们存储的元素大概有多少时,使用reserve方法,减少vector重新申请内存-拷贝数据-释放旧空间的次数
#include<iostream>
#include<vector>
using namespace std;
void test01() {vector<int> v;int* p=NULL;int count = 0; //统计vector容量增长次数for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]) {p = &v[0]; //内存首地址发生变化,申请新内存count++;}}cout << count << endl;
}
void test02() {vector<int> v;v.reserve(100000);int* p=NULL;int count = 0; //统计vector容量增长次数for (int i = 0; i < 100000; i++){v.push_back(i);if (p != &v[0]) {p = &v[0];count++;}}cout << count << endl;
}
int main() {test01();test02();
}
输出:
#include<iostream>
#include<vector>
using namespace std;void PrintVector(vector<int>& v) {for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}//初始化
void test01() {vector<int> v1; //默认构造int arr[] = { 10,20,30,40 };vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));vector<int> v3(v2.begin(), v2.end());vector<int> v4(v3);PrintVector(v2);PrintVector(v3);PrintVector(v4);
}
/*
输出:
10 20 30 40
10 20 30 40
10 20 30 40
*///赋值操作
void test02()
{int arr[] = { 10,20,30,40 };vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));//成员方法vector<int> v2;v2.assign(v1.begin(), v1.end());//重载=号vector<int> v3;v3 = v2;cout << "v1" << endl;PrintVector(v1);cout << endl<<"-------" << endl;int arr1[] = { 100,200,300,400 };vector<int> v4(arr1, arr1 + sizeof(arr1) / sizeof(int));v4.swap(v1); //将指针指向进行交换PrintVector(v1);PrintVector(v2);PrintVector(v3);PrintVector(v4);
}
/*
输出:
v1
10 20 30 40-------
100 200 300 400
10 20 30 40
10 20 30 40
10 20 30 40
*///大小操作
void test03() {int arr[] = { 10,20,30,40 };vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));cout << "size:" << v1.size() << endl;if (!v1.empty()) {cout << "v1 is not empty" << endl;}PrintVector(v1);v1.resize(2);PrintVector(v1);v1.resize(6);PrintVector(v1);v1.resize(8, 1);PrintVector(v1);for (int i = 0; i < 10000; i++){v1.push_back(i);}cout << "size:" << v1.size() << endl;cout << "capacity:"<<v1.capacity() << endl; //容量
}
/*
输出:
size:4
v1 is not empty
10 20 30 40
10 20
10 20 0 0 0 0
10 20 0 0 0 0 1 1
size:10008
capacity:12138
*///存储数据
void test04() {int arr[] = { 10,20,30,40 };vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));for (int i = 0; i < v1.size(); i++){cout << v1[i] << endl; //不抛异常}for (int i = 0; i < v1.size(); i++){cout << v1.at(i) << endl; //抛异常}//front第一个元素 back最后一个元素cout << "第一个元素front:" << v1.front() << endl;cout << "最后一个元素back:" << v1.back() << endl;
}
/*
输出:
10
20
30
40
10
20
30
40
第一个元素front:10
最后一个元素back:40
*///插入和删除
void test05() {vector<int> v;v.push_back(10);v.push_back(20);v.insert(v.begin(), 30);v.insert(v.end(), 50);v.insert(v.begin() + 2, 1000);//vector容器支持随机访问//支持数组下标访问,支持随机访问//迭代器可以直接+2 +3 -2等操作PrintVector(v);v.erase(v.begin());PrintVector(v);v.erase(v.begin() + 1, v.end());PrintVector(v);v.clear();cout << "size:" << v.size() << endl;}
/*
输出:
30 10 1000 20 50
10 1000 20 50
10
size:0
*/
//巧用swap缩减空间
void test06() {//vector 添加元素 自动增长 删除元素 不会自动减少vector<int> v;for (int i = 0; i < 10000; i++) {v.push_back(i);}cout << "size:" << v.size() << endl;cout << "capacity:" << v.capacity() << endl; //容量v.resize(10);cout << "=----------------" << endl;cout << "size:" << v.size() << endl;cout << "capacity:" << v.capacity() << endl; //容量//收缩空间// 1 vector<int>为匿名对象,// 2 vector<int>(v)用v去初始化匿名对象,会根据他自己大小去初始化自己// 3 vector<int>(v).swap(v) v与匿名对象交换内存指向,将匿名对象销毁vector<int>(v).swap(v);cout << "=----------------" << endl;cout << "size:" << v.size() << endl;cout << "capacity:" << v.capacity() << endl; //容量}
/*
输出:
size:10000
capacity:12138
=----------------
size:10
capacity:12138
=----------------
size:10
capacity:10
*/
int main()
{cout << "-------------test01--------------" << endl;test01();cout << "-------------test02--------------" << endl;test02();cout << "-------------test03--------------" << endl;test03();cout << "-------------test04--------------" << endl;test04();cout << "-------------test05--------------" << endl;test05();cout << "-------------test06--------------" << endl;test06();
}
STL9-vector容器相关推荐
- C++:vector容器中使用pair该如何访问成员
(显然,vector 的索引从 0 开始,这和普通数组一样.通过使用索引,总是可以访问到 vector 容器中现有的元素.) 如果是简单的访问vector里边的成员的话,是这样的: #include ...
- vector容器中erase(删除)的使用
erase函数可以用于删除vector容器中的一个或者一段元素,在删除一个元素的时候,其参数为指向相应元素的迭代器,而在删除一段元素的时候,参数为指向一段元素的开头的迭代器以及指向结尾元素的下一个元素 ...
- vector容器 begin()与end()函数、front()与back()的用法
begin函数: 函数原型: iterator begin(); const_iterator begin(); 功能: 返回一个当前vector容器中起始元素的迭代器. end函数: 函数原型: i ...
- vector容器中数据的排序方法
前言 在项目中经常会遇到对vector容器中数据排序的情况,有时候vector中数据还常常是pair关联容器.此处给出一个使用demo,使用了C++中的lambda表达式. #include" ...
- vector 容器 动态数组总结
vector 容器 动态数组总结 二话不说直接上代码 #include <vector> #include <algorithm> #include <iostream& ...
- vector容器的用法
转自一篇博客^-^: 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.p ...
- vector容器与iterator迭代器
vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象 ...
- 【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )
文章目录 序列式容器 vector 简介 vector ( 向量 ) 头文件 vector ( 向量 ) 声明及初始化 vector ( 向量 ) 添加元素 vector ( 向量 ) 查询元素 ve ...
- C++ vector 容器浅析
一.什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能 ...
- C++vector容器学习
发现一篇好文:比较详细地介绍了vector容器的知识点 https://blog.csdn.net/fanyun_01/article/details/56842637 vector<vecto ...
最新文章
- 12岁AI开发者现身DuerOS发布会:得开发者得天下
- python加粗_python – 设置为使用标记加粗选定的文本
- [转载] 七龙珠第一部——第034话 红缎带军团
- 数据库开发——MySQL——慢查询优化
- Win11手机应用大改!全新界面来袭
- mybatis源码阅读(八) ---Interceptor了解一下
- SICK TiM561激光雷达的使用
- 开发类似vs的黑色风格_传闻:2020年《使命召唤》将是《黑色行动》重启作品
- python爬取酷狗音乐top500_Python爬取酷狗音乐TOP500榜单
- 计算机网络由 子网,计算机网络系统是由通信子网和资源子网组成的。()
- 常见视频封装格式(3) — MP4
- 关于解决netstat -nb中出现请求的操作需要提升问题
- 用SPSS-Modeler分析银行信用风险评分方法
- Burpsuite 使用教程
- 2019-04-28 21:43:41.098 ERROR 2920 --- [nio-8888-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
- 进程创建过程详解 CreateProcess
- RR RC 隔离级别
- 消费者心理-电子书下载
- 列表视图——List View
- ERP的概念、简介与发展历程
热门文章
- yb3防爆电机型号含义_yb3防爆电机型号含义有哪些?
- 09 - java 包命名规范
- xbox虚拟服务器,Xbox One平台真相:原生Win8/虚拟化运行
- 资金时间价值的计算机应用视频讲解,第八章资金时间价值与方案经济比选20161018讲解.ppt...
- MySQL 高级 —— 复合索引简介(多列索引)
- Java常用设计模式————工厂模式
- pve安装黑群晖直通硬盘_PVE+lede+DSM网卡硬盘直通+win10
- 没有工作经验找it_校招和社招有什么区别?没有工作经验,如何找工作?
- 西南科技大学 计算机组成原理2011-2012,2011-2012学年第2学期课程教案-计算机组成原理-陈立伟.doc...
- C语言指针怎么存二维数组,C语言怎么用指针代替二维数组