C++总结篇(5)vector

vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

Vector迭代器:

  1. begin+end: begin获取第一个位置的迭代器,end获取最后一个数据下一个位置的迭代器。
  2. rbegin+rend: rbegin获取最后一个位置的迭代器,rend获取第一个位置前一个位置的迭代器

如例:

void test1(vector<int> &vec)
{vector<int>::iterator it = vec.begin();while (it != vec.end()){cout << *it << endl;it++;}
}void test2(vector<int> &vec)
{vector<int>::reverse_iterator  rit = vec.rbegin();while (rit != vec.rend()){cout << *rit << endl;rit++;}
}int main()
{vector<int>vec(4,10);vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);test1(vec);test2(vec);system("pause");return 0;
}

Vector空间增长

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

如例:

void test(vector<int> &vec)
{cout << vec.size() << endl;//获取有效数据的大小cout << vec.capacity() << endl;//获取容量的大小cout << vec.empty() << endl;//检查空间是否为空vec.resize(5);//改变有效数据的大小为5vec.reserve(15);//改变空间的大小为15cout << vec.size() << endl;cout << vec.capacity() << endl;//打印数据vector<int>::iterator it = vec.begin();while (it != vec.end()){cout << *it << endl;it++;}vec.clear();//清空cout << vec.size() << endl;cout << vec.capacity() << endl;cout << vec.empty() << endl;
}

Vector的增删查改

push_back 	 尾插
pop_back 	 尾删
insert 	     在指定位置插入val
erase        删除指定位置的数据
swap         交换两个vector的数据空间
operator[]   像数组一样访问

如例:

vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end,int n)
{for (; begin != end&&n; begin++, n--);return begin;
}void  test(vector<int> &vec)
{vec.push_back(5);//尾插一个数据5vec.pop_back();//从尾删除一个数据vector<int>::iterator pos = find(vec.begin(), vec.end(), 2);//查找第2个位置数据的迭代器并返回给posvec.insert(pos, 12);//在pos位置插入数据12vec.erase(pos);//删除pos位置的数据//新建一个vector容器v并插入数据vector<int> v;v.push_back(5);v.push_back(6);v.push_back(7);v.push_back(8);swap(v, vec);//交换v与vec的数据cout << vec.operator[](1)<<endl;//打印vec中位置为1处的数据
}

迭代器失效

插入数据迭代器失效
当在pos位置插入数据操作时,insert会使vector扩容,一旦扩容,pos指向的位置会被释放,故而无法对其访问。
Vector扩容并不是在原有的基础上增大空间,而是重新开辟一个合适大小的空间,在将原来vector中的数据移到新开辟的vector中,再将原来vector的释放掉。

如例:

vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end, int n)
{for (; begin != end&&n; begin++, n--);return begin;
}void  test(vector<int> &vec)
{vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << vec.size() << endl;cout << vec.capacity() << endl;vector<int>::iterator pos = find(vec.begin(), vec.end(), 3);vec.insert(pos, 11);cout << *pos << endl;//出错
}

删除指定位置数据迭代器失效

将pos位置的数据删除掉,即将该数据存放的空间时放掉,在对该位置进访问即为非法访问。

如例:

vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end, int n)
{for (; begin != end&&n; begin++, n--);return begin;
}void  test(vector<int> &vec)
{vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << vec.size() << endl;cout << vec.capacity() << endl;vector<int>::iterator pos = find(vec.begin(), vec.end(), 3);vec.erase(pos);cout << *pos << endl;//出错
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清除缓存 c语言_如何用C语言设置,清除和切换单个位?

清除缓存 c语言Given a number and we have to 1) set a bit, 2) clear a bit and 3) toggle a bit. 给定一个数字&#xff0c;我们必须1)设置一个位&#xff0c;2)清除一个位&#xff0c;3)切换一个位。 1)设置一点 (1) Setting a bit) To set a particular bit of a number,…

算法图解:如何找出栈中的最小值?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;前面我们学习了很多关于栈的知识&#xff0c;比如《动图演示&#xff1a;手撸堆栈的两种实现方法&#xff01;》和《JDK 竟然…

数据库概况

New Words & Expressions:facilitate 使容易&#xff0c;促进retrieval n. 检索field n. 字段record 记录&#xff0c;alphabetically 按字母顺序地chronologically 按年代顺序排break down v. 分解build up 建造&#xff0c;装配&#xff0c;组成encyclopedia n. 百科全书…

30岁之前需要知道的10个人生底线,你知道几个?

http://blog.csdn.net/wojiushiwo987/article/details/8893302 引导语&#xff1a;现在的这些年轻人&#xff0c;你是否考虑过你人生成长发展风向与目标&#xff0c;一旦追求和愿望受阻后&#xff0c;你会如何思考对应&#xff0c;分析其原因的所在&#xff0c;你该如何面对去做…

用C语言设置程序开机自启动

当需要使某一程序在开机时就启动它&#xff0c;需要把它写进注册表的启动项中。 下面就展示一种简单的写法&#xff1a; #include <windows.h> #include <stdlib.h> #include <stdio.h>void ComputerStart(char *pathName) {//找到系统的启动项 char *szSub…

漫画:什么是布隆算法?

两周之前——爬虫的原理就不细说了&#xff0c;无非是通过种子URL来顺藤摸瓜&#xff0c;爬取出网站关联的所有的子网页&#xff0c;存入自己的网页库当中。但是&#xff0c;这其中涉及到一个小小的问题......URL去重方案第一版&#xff1a;HashSet创建一个HashSet集合&#xf…

kotlin 字符串_Kotlin程序确定字符串是否具有所有唯一字符

kotlin 字符串Given a string, we have to check whether it has all unique characters or not. 给定一个字符串&#xff0c;我们必须检查它是否具有所有唯一字符。 Example: 例&#xff1a; Input:string "includehelp"Output:falseInput:string "abcd&qu…

css优先级机制说明

首先说明下样式的优先级,样式有三种&#xff1a; 1. 外部样式&#xff08;External style sheet&#xff09; 示例&#xff1a; <!-- 外部样式 bootstrap.min.css --><link href"css/bootstrap.min.css" rel"stylesheet" type"text/css"…

制作一个钟表

用EasyX制作的一个简易钟表&#xff0c;需设置字符集属性为多字节字符集。效果如下所示&#xff1a; GIF图会有些闪动&#xff0c;在实际中这种闪动几乎不可见。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<graphics.h> #include<math.h…

趣谈MySQL历史,以及MariaDB初体验

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;MySQL 是一个跨世纪的伟大产品&#xff0c;它最早诞生于 1979 年&#xff0c;距今已经有 40 多年的历史了&#xff0c;而如今…

网页设置页数/总页数_图书分配问题(分配最小页数)

网页设置页数/总页数Problem statement: 问题陈述&#xff1a; Given an array of integers A of size N and an integer B. College library has N bags, the ith book has A[i] number of pages. 给定一个大小为N的整数A和一个整数B的数组。 高校图书馆有N个书包&#xff0c…

算法图解:如何判断括号是否有效?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;今天要讲的这道题是 bilibili 今年的笔试真题&#xff0c;也是一道关于栈的经典面试题。经过前面文章的学习&#xff0c;我想…

让人省心的事件委托

事件委托:利用冒泡的原理把实践添加到父元素级别上&#xff0c;触发执行效果。 时间委托优点&#xff1a; 1.提高性能&#xff0c;不用for循环遍历所有li&#xff0c;节省性能。 2.新添加的元素还会有原来之前的事件。 先看时间委托提高的性能吧&#xff0c;一个常…

Python HTMLCalendar类| 带有示例的formatyearpage()方法

Python HTMLCalendar.formatyearpage()方法 (Python HTMLCalendar.formatyearpage() Method) formatyearpage() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns a years calendar a…

最新版MySQL在MacOS上的实践!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 MacOS 上安装最新版的 MySQL 有三种方法&#xff1a;使用 Docker 安装&#xff1b;使用 Homebrew 运行 brew install mys…

二进制文件的操作

所有文件的存储其实质都是二进制的&#xff0c;二进制文件往往由两部分组成&#xff0c;一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息&#xff0c;以BMP等图象文件为例&#xff0c;它们的文件头中存放了是何种图形格式、图象大小、调色板等信息…

【转】GitHub入门详细讲解

第一&#xff1a;请登录https://windows.github.com/ 下载您需要的安装软件&#xff0c;进行安装。安装后桌面有&#xff1a;GitHub 和 Git Shell 第二&#xff1a; 申请一个帐号https://github.com/signup/free 帐号名字要记得清楚。 其他请参考 http://www.woiweb.net/github…

简易飞机空战小游戏

#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #include<windows.h>#define width 30 //屏幕的宽 #define high 40 //屏幕的高 #define EnemyAirportNum 5 //敌机出现的数量 #define MyFly 1 …

kotlin获取属性_Kotlin程序| 属性获取器和设置器方法的示例

kotlin获取属性属性获取器和设置器方法 (Properties Getter and Setter Methods) Variable having a class-level scope, declared inside the class body but outside the functions called property. 具有类级别范围的变量&#xff0c;在类主体内部但在称为属性的函数外部声明…

忘记MySQL密码怎么办?一招教你搞定!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在安装完 MySQL 或者是在使用 MySQL 时&#xff0c;最尴尬的就是忘记密码了&#xff0c;墨菲定律也告诉我们&#xff0c;如果…