当前位置: 首页 > news >正文

C++ —— 关于vector

目录

链接

1. vector的定义

2. vector的构造

3. vector 的遍历

4. vector 的扩容机制

5. vector 的空间接口

5.1 resize 接口  

 5.2 push_back

5.3 insert 

5.4 erase

5.5 流插入与流提取  

vector 并不支持流插入与流提取,但是可以自己设计,更加灵活方便

6. vector 的不同类型元素 


链接

cplusplus.com/reference/vector/vector/icon-default.png?t=O83Ahttps://cplusplus.com/reference/vector/vector/


1. vector的定义

(constructor)构造函数声明接口说明
vector()无参构造
vector(size_type n, const value_type& val =
value_type())
构造并初始化n个val
vector (const vector& x);拷贝构造
vector (InputIterator first, InputIterator last);使用迭代器进行初始化构

 

2. vector的构造

//模版类只能显式实例化
vector<int> v1;
vector<int> v2(10, 1);//迭代器初始化
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(++v2.begin(), --v2.end());

 


3. vector 的遍历

vector 与 string 的遍历相同,并且做了更多的优化

void test_vector1()
{vector<int> v1;vector<int> v2(10, 1);vector<int> v3(++v2.begin(), --v2.end());//下标遍历for (size_t i = 0; i < v3.size(); i++){cout << v3[i] << " ";}cout << endl;//迭代器遍历vector<int>::iterator it = v3.begin();while (it != v3.end()){cout << *it << " ";++it;}cout << endl;// 范围 for 遍历for (auto e : v3){cout << e << " ";}cout << endl;
}


4. vector 的扩容机制

vector 的扩容机制在 VS 环境下是1.5倍扩容,在 g++ 环境下是2倍扩容,和string相同

但是有一点不同:

那就是string 的 reverse 接口如果给出的值小于原来的容量那么就可能会缩容,但是 vector 的 reverse 接口如果给出一个小于原容量的值就不会缩容

 

void TestVectorExpend()
{size_t sz;vector<int> v;sz = v.capacity();cout << "capacity changed :" << sz << "\n";cout << "make a grow" << endl;for (size_t i = 0; i < 100; i++){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed :" << sz << "\n";}}
}


5. vector 的空间接口

size获取数据个数
capacity获取容量大小
empty判断是否为空
resize改变vector的size
reserve 改变vector的capacity

5.1 resize 接口  

 resize 接口是在原来 vector 对象的基础上进行添加数据

当然有两种情况:

一种是添加数据容量小于原来的size,就会减小size的值而不改变capacity的值(容量不变)

第二种情况就是大于size的值,就会根据给定的值来扩容

vector<int> v(10, 1);
cout << v.size() << endl;
cout << v.capacity() << endl;//小于size
v.resize(5, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;//大于size
v.resize(15, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;

 


void test_vector3()
{//10个整形数据1vector<int> v(10, 1);//申请20空间v.reserve(20);cout << v.size() << endl;cout << v.capacity() << endl;//10个整形数据1,补上5个整形数据2v.resize(15, 2);cout << v.size() << endl;cout << v.capacity() << endl;//10个整形数据1,5个整形数据2,补上10个整形数据3v.resize(25, 3);cout << v.size() << endl;cout << v.capacity() << endl;//只保留5个数据v.resize(5);cout << v.size() << endl;cout << v.capacity() << endl;
}

 


                                                通常 vector 支持迭代器插入


 5.2 push_back

//尾插
vector<int> v(10, 1);
v.push_back(10);
for (auto e : v)
{cout << e << " ";
}
cout << endl;


5.3 insert 

//头插
vector<int> v(10, 1);
v.insert(v.begin(), 1);
for (auto e : v)
{cout << e << " ";
}
cout << endl;//第一个数+3之后在第三个位置进行插入
v.insert(v.begin() + 3, 1);
for (auto e : v)
{cout << e << " ";
}

5.4 erase

删除指定位置的数据

//头删
vector<int> v(10, 1);
v.erase(v.begin());
for (auto e : v)
{cout << e << " ";
}
cout << endl;//第一个数+3之后删除第三个位置的数据
v.erase(v.begin() + 3);
for (auto e : v)
{cout << e << " ";
}
cout << endl;

 


5.5 流插入与流提取  

vector 并不支持流插入与流提取,但是可以自己设计,更加灵活方便

vector<int> v(10);
for (size_t i = 0; i < v.size(); i++)
{cin >> v[i];
}
for (auto e : v)
{cout << e << " ";
}
cout << endl;


6. vector 的不同类型元素 

vector不光可以存储int,double类型,还可以存储日期类,string,自定义类型,甚至还可以存储vector(也就是存储二维数组)

 

vector<vector<int>>:二维数组存放整数类型

 

 

 

//二维数组//5个元素的一维数组vector<int> v(5, 1);//开辟一个10行5列的二维数组vector<vector<int>> vv(10, v);vv[2][1]=1;//这两段代码的意思是相同的//vv.operator[](2)operator[](1)=2;

 遍历

 //二维数组//5个元素的一维数组vector<int> v(5, 1);//开辟一个10行5列的二维数组vector<vector<int>> vv(10, v);//使用下标遍历二维数组for (int i = 0; i < vv.size(); i++){for (int j = 0; j < v.size(); j++){cout << vv[i][j] << " ";}cout << endl;}

 

 


感谢观看~

http://www.lryc.cn/news/441404.html

相关文章:

  • 设计模式——对象池模式
  • 【VitualBox】VitualBox的网络模式+网络配置
  • 「Netmarble 小镇」活动来了:踏上穿越标志性世界的旅程!
  • MySQL 中的索引覆盖扫描:加速查询的秘密武器
  • 【机器学习】经典数据集鸢尾花的分类识别
  • Oracle从入门到放弃
  • 学习笔记 - 知识图谱的符号表示方法
  • 探索RESTful风格的网络请求:构建高效、可维护的API接口【后端 20】
  • 【深度智能】:迈向高级时代的人工智能全景指南
  • unity3d入门教程七
  • python植物大战僵尸项目源码【免费】
  • 目前人工智能时代,程序员如何保持核心竞争力?
  • golang学习笔记20——golang微服务负载均衡的问题与解决方案
  • 基于微信小程序的健身房管理系统
  • 【裸机装机系列】6.kali(ubuntu)-图形界面优化-让linux更适合你的使用习惯
  • 新的突破,如何让AI与人类对话变得“顺滑”:Moshi背后的黑科技
  • torch.embedding 报错 IndexError: index out of range in self
  • rocky9虚拟机配置双网卡的详细过程
  • 索引的介绍
  • Web后端服务平台解析漏洞与修复、文件包含漏洞详解
  • 树莓派介绍与可安装的操作系统
  • Qt常用控件——QTextEdit
  • docker-compose 部署 flink [支持pyflink]
  • C++中string类的模拟实现
  • C++函数在库中的地址
  • 图像生成大模型imagen
  • Redis集群知识及实战
  • 数据报表轻松管理,强大“后台”不可少
  • 简易CPU设计入门:本CPU项目的指令格式
  • Datawhile 组队学习Tiny-universe Task01