【STL】Vector容器

news/2024/11/17 23:52:09/

1、vector基本概念

vector数据结构和数组非常相似,也成为单端数组
vector与普通数组的区别:数组是静态空间,而vector可以动态扩展。
动态扩展:并不是在原空间之后继续新空间,而是找更大的内存空间,然后将原数据拷贝至新空间。
vector容器的迭代器支持随机访问。
vector构造函数

  • vectorv; 采用模板实现类实现,
  • vector<v.begin(),v.end()); 将v[begin(),end()]区间中的元素拷贝给本身
  • vector(n,elem); 构造函数将n个elem拷贝给本身
  • vector(const vector &ver); 拷贝构造函数
	vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i);}printVector(v1);vector<int>v2(++v1.begin(), v1.end()); // 区间构造printVector(v2);vector<int>v3(10, 100); // 个数 和 赋值printVector(v3);vector<int>v4(v2); // 拷贝构造printVector(v4);

2、vector赋值操作

给vector容器赋值

	vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);//赋值 operator=vector<int>v2;v2 = v1;//assignvector<int>v3;v3.assign(v1.begin(), v1.end());printVector(v3);vector<int>v4;v4.assign(10, 100);printVector(v4);

3、vector容量和大小

  • empty(); //判断容器是否为空
  • capacity(); //容器的容量
  • size(); //返回容器中元素的个数
  • resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。
  • resize(int num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。
	vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);if (v1.empty()) {cout << "容器为空" << endl;}cout << v1.size()<<endl;cout << v1.capacity()<<endl;v1.resize(7);printVector(v1);v1.resize(4, 3);printVector(v1);

4、vector插入和删除

  • push_back(elem); //尾部插入元素
  • pop_back(); 删除最后一个元素
  • insert(const_iterator pos.elem); 迭代器指向位置pos插入元素elem
  • insert(const_iterator pos,int count,elem); 迭代器指向位置pos插入元素elem
  • erase(const_iterator pos); 删除迭代器从start到end之间的元素
  • clear(); 删除容器所有元素
vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}v1.pop_back();v1.insert(v1.begin(), 1);v1.insert(v1.begin(), 1,100);v1.erase(v1.begin());printVector(v1);

5、vector数据存取

  • at(int idx);
  • operator[];
  • front();
  • back();

6、vector互换容器

实现容器内元素的交换

vector<int>v1; // 默认无参构造for (int i = 0; i < 5; i++) {v1.push_back(i+i%2); //push_back}printVector(v1);vector<int>v2; // 默认无参构造for (int i = 0; i < 5; i++) {v2.push_back(i + i % 3); //push_back}printVector(v2);v1.swap(v2);printVector(v1);printVector(v2);v1.assign(1000,10);cout << v1.capacity() << endl;v1.resize(3);cout << v1.capacity()<<endl;vector<int>(v1).swap(v1); // 缩小内存空间cout << v1.capacity() << endl;printVector(v1);

7、vector预留空间

减少vector在动态扩展容量时的扩展次数

  • reserve(int len); // 容器预留len个元素长度,预留位置不初始化,元素不可访问
v1.reserve(100);

http://www.ppmy.cn/news/46162.html

相关文章

Layui表单元素.上

学习要点&#xff1a; 1. 表单元素 本节课我们来开始了解 Layui 表单元素的基本使用。 一&#xff0e;表单元素 1. 表单我们分两节课来说&#xff0c;第一节&#xff0c;先按套路做出一张表单&#xff1b; 2. 第二节&#xff1a;分析每个表单的基本功能和样式属性的变…

c++ 智能指针

c 有三种智能指针&#xff1a; shared_ptrweak_ptrunique_ptr 头文件 <memory> 关于 auto_ptr 指针 C98 提供了 auto_ptr 模板的解决方案, 在 c11 被弃用&#xff0c;c17中彻底移除&#xff0c;用 unique_ptr 代替 auto_ptr 被弃用的主要原因&#xff1a;  1.复制或…

PWN-ret2shellcode原理

我们之前做过很简单的pwn题目 buuctf-rip这种 是在程序中存在shellcode 直接返回地址改为这个shellcode的地址即可 但是如果程序里面没有呢 这种类型就是ret2shellcode 常见的shellcode shellcode "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5…

Servlet的生命周期

目录 一 . init() 方法 二 . destroy() 方法 三 . service () 方法 四 . 生命周期过程 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;用Java编写的服务器端程序&#xff0c;具有独立于平台和协议的…

Oracle11g全新讲解之PLSQL编程

一、PLSQL编程 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言.通过增加变量、控制语句&#xff0c;使我们可以写一些逻辑更加复杂的数据库操作. 语法结构 declare--声明变量 变量名称 v_ 开头&#xff0c;规范 begin--执行具体的语句--异常处理 …

数据结构入门-11-红黑树

史上最负盛名的平衡二叉树–红黑树&#xff0c;但其实就是2-3树的一种实现 文章目录 一、红黑树性质二、红黑树性质推导过程2-3树2.3.1 如何维护绝对平衡2-3树2.3.2 红黑树&2-3树2.3.3 再来看红黑树的性质1.每个节点为 Black or Red2.根节点是Black3.每一个叶子节点(最后的…

程序员阿里三面无理由挂了,被HR一句话噎死,网友:这可是阿里啊

进入互联网大厂一般都是“过五关斩六将”&#xff0c;难度堪比西天取经&#xff0c;但当你真正面对这些大厂的面试时&#xff0c;有时候又会被其中的神操作弄的很是蒙圈。 近日&#xff0c;某位程序员发帖称&#xff0c;自己去阿里面试&#xff0c;三面都过了&#xff0c;却被…

15、异常处理

文章目录 1、错误处理1、默认规则2、定制错误处理逻辑3、异常处理自动配置原理4、异常处理步骤流程 【尚硅谷】SpringBoot2零基础入门教程-讲师&#xff1a;雷丰阳 笔记 路还在继续&#xff0c;梦还在期许 1、错误处理 1、默认规则 默认情况下&#xff0c;Spring Boot提供/er…