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

C++中vector类的使用

目录

1.vector类常用接口说明

1.1默认成员函数

1.1.1构造函数(constructor)

1.1.2 赋值运算符重载(operator=())

2. vector对象的访问及遍历操作(Iterators and Element access)

3.vector类对象的容量操作(Capacity)

4. vector类对象的修改及相关操作(Modifiers and String operations)

5. 使用vector存储string对象以及实现二维数组


    C++中的vector对应与C语言中的顺序表,底层还是通过数组来存储数据的。可以参考用C语言实现顺序表。vector和string不一样的是vector是类模板,类模板只能显式实例化。vector是STL中一种重要的数据结构。C++之所以设计STL就是为了统一各种数据结构的接口,所以下面介绍的vector的接口在使用上与string等其他数据结构具有相同的用法。

#include <iostream>
#include <vector>using namepsace std;int main()
{vector<int> v1;    //类模板只能显示实例化return 0;
}

1.vector类常用接口说明

        vector类的接口我按照C++函数网址进行介绍,这里只进行常用接口的介绍,其他接口、类中的函数参数和函数重载若有需要请参考该网址,下列介绍就不一一列出了。vector的接口和string的接口很相似,可以参考C++中string类的使用进行对比。

1.1默认成员函数

1.1.1构造函数(constructor)

        这里的默认构造其实和string类类似,这里就不一一说明了。

#include<iostream>
#include<vector>
#include<string>
using namespace std;void test_vector1()
{//1.defaultvector<int> v1;	//size == 0 capacity == 0for (auto e : v1){cout << e << " ";}cout << endl;//2.fillvector<int> v2(10, 1);	//用n个值进行初始化for (auto e : v2){cout << e << " ";}cout << endl;//3.rangevector<int> v3(++v2.begin(), --v2.end());	//用迭代器区间进行构造vector<int>::iterator it = v3.begin();	//通过迭代器进行遍历while (it != v3.end()){cout << *it << " ";it++;}cout << endl;//4.copyvector<int> v4 = v2;for (auto e : v4){cout << e << " ";}cout << endl;//5.initializer listvector<int>v5 = { 0,3,5,6,9,3,0 };for (auto e : v5){cout << e << " ";}cout << endl;
}int main()
{test_vector1();return 0;
}

1.1.2 赋值运算符重载(operator=())

#include<iostream>
#include<vector>
#include<string>
using namespace std;void test_vector2()
{vector<int> v1(10, 1);//1.copyvector<int> v2;v2 = v1;for (auto& e : v2){cout << e << " ";}cout << endl;//1.initializer listvector<int> v3;v3 = { 1,2,3,4,5,6 };for (auto& e : v3){cout << e << " ";}cout << endl;
}int main()
{    test_vector2();return 0;
}

2. vector对象的访问及遍历操作(Iterators and Element access)

         vector对象的访问及遍历操作和string基本上是一模一样的,并且两个数据结构的底层都是通过数组进行实现的,参考C++中string类的使用即可。

3.vector类对象的容量操作(Capacity)

#include<iostream>
#include<vector>
#include<string>
using namespace std;void TestVectorExpand()
{//vs下是1.5倍扩容,g++下是两倍扩容size_t sz;vector<int> v;//v.reserve(99);	最少开n个sz = v.capacity();cout << "making v grow:\n";cout << "capacity changed: " << sz << "\n";for (int i = 0; i < 100; ++i){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << "\n";}}
}void test_vector3()
{//1.size//2.capacity//3.emptyvector<int> v1(10, 1);cout << v1.size() << endl;cout << v1.capacity() << endl;cout << v1.empty() << endl;v1.clear();cout << endl;cout << v1.size() << endl;cout << v1.capacity() << endl;cout << v1.empty() << endl;cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;TestVectorExpand();//不缩容,不改变sizevector<int> v2(10, 1);v2.reserve(20);cout << v2.size() << endl;cout << v2.capacity() << endl;cout << endl;v2.reserve(15);cout << v2.size() << endl;cout << v2.capacity() << endl;cout << endl;v2.reserve(5);cout << v2.size() << endl;cout << v2.capacity() << endl;cout << endl;cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;vector<int> v3(10, 1);for (auto& e : v3){cout << e << " ";}cout << v3.size() << endl;cout << v3.capacity() << endl;cout << endl;//vs不缩容,如果小于n < size,则缩到n,如果size < n < capacity,把size变为n, 如果n > capacity则扩容之后把size变为nv3.resize(15, 2);for (auto& e : v3){cout << e << " ";}cout << endl;cout << v3.size() << endl;cout << v3.capacity() << endl;cout << endl;v3.resize(25, 3);for (auto& e : v3){cout << e << " ";}cout << endl;cout << v3.size() << endl;cout << v3.capacity() << endl;cout << endl;v3.resize(5);for (auto& e : v3){cout << e << " ";}cout << endl;cout << v3.size() << endl;cout << v3.capacity() << endl;
}int main()
{test_vector3();return 0;
}

4. vector类对象的修改及相关操作(Modifiers and String operations)

#include<iostream>
#include<vector>
using namespace std;void test_vecotr4()
{vector<int> v(10, 1);v.push_back(2);v.insert(v.begin(), 5);for (auto& e : v){cout << e << " ";}cout << endl;v.insert(v.begin() + 3, 3);for (auto& e : v){cout << e << " ";}cout << endl;v.pop_back();for (auto& e : v){cout << e << " ";}cout << endl;v.erase(v.begin(), v.begin() + 3);for (auto& e : v){cout << e << " ";}cout << endl;
}int main()
{test_vector4();return 0;
}

5. 使用vector存储string对象以及实现二维数组

#include<iostream>
#include<vector>
#include<string>
using namespace std;void test_vector5()
{vector<string> v1;string s1 = "xxxxx";v1.push_back(s1);v1.push_back("yyyyy");	//隐式类型转换for (auto& e : v1)		{cout << e << " ";}cout << endl;//二维数组,初始化一个10*5的二维数组vector<int> v(5, 1);	//初始化行vector<vector<int>> vv(10, v);    //初始化列vv[2][1] = 2;for (size_t i = 0; i < vv.size(); i++){for (size_t j = 0; j < vv[i].size(); j++){cout << vv[i][j] << " ";}cout << endl;}
}int main()
{    test_vector5();return 0;
}

 

 

相关文章:

  • Spring后端直接用枚举类接收参数,自定义通用枚举类反序列化器
  • 极狐GitLab 重要安全版本:17.3.3, 17.2.7, 17.1.8, 17.0.8, 16.11.10
  • 计算机网络第四章——网络层
  • mtk平台编译出来的cust.dtsi有什么作用
  • JVM频繁Full GC问题的排查与解决方案
  • SpringBoot使用validation进行自参数校验
  • 未来数字世界相关技术:数字人、元宇宙、全息显示
  • 2024新动态:低代码开发占领新常态市场
  • 智能抠图怎么使用?4个快速消除图片背景的小技巧
  • FPGA随记-二进制转格雷码
  • pytorch 加载模型参数后 如何测试数据,应用模型预测数据,然后连续变量转换成 list 或者numpy.array padans并保存到csv文件中
  • 单链表的实现(C语言)
  • Android 去掉SIM卡插拔出现的重启弹窗提示
  • STM32 的 SDIO 接口(基于STM32F429HAL库)
  • 【xhs截流软件】爬取小红书关键词笔记下的筛选评论
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CSS居中完全指南——构建CSS居中决策树
  • Date型的使用
  • Effective Java 笔记(一)
  • Git 使用集
  • Java,console输出实时的转向GUI textbox
  • javascript从右向左截取指定位数字符的3种方法
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Java知识点总结(JavaIO-打印流)
  • JS 面试题总结
  • nodejs调试方法
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SQLServer之索引简介
  • Sublime text 3 3103 注册码
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 翻译--Thinking in React
  • 后端_MYSQL
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端知识点整理(待续)
  • 人脸识别最新开发经验demo
  • 软件开发学习的5大技巧,你知道吗?
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​学习一下,什么是预包装食品?​
  • #QT项目实战(天气预报)
  • #WEB前端(HTML属性)
  • #宝哥教你#查看jquery绑定的事件函数
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)Unity3DUnity3D在android下调试