容器的分类与各种测试(二)——vector部分用法
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版
基础用法在代码注释中说明
//test.cpp
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
vector<int> v1(10);//为向量v1赋值10个0
vector<int> v3(10, 100);//为向量v3赋值10个100
for(int i=1; i<8; ++i)
{
v.push_back(i);
v1.push_back(i);
}
vector<int>::iterator it = v.begin();//迭代器,指向向量头部
cout<<"v = ";
while(it!=v.end())
{
cout<<*it<<" ";
++it;
}
cout<<endl; vector<int>::reverse_iterator rv_it = v1.rbegin();//反向迭代器,指向向量尾部,且自加时是向向量头部移动:
cout<<"rv_v1 = ";
while(rv_it != v1.rend())
{
cout<<*rv_it<<" ";
++rv_it;
}
cout<<endl; v3.insert(v3.begin()+3, 7);//在v3第三个元素前插入7
v3.insert(v3.begin()+1, 2, 8);//在v3第二个元素前插入2个8
vector<int>::iterator first = v.begin()+3;
vector<int>::iterator end = v.end();
v3.insert(v3.end(), first, end);//在v3.end()后将区间[v1.begin()+3, v1.end())元素全部插入:
vector<int>::iterator it3 = v3.begin();
v3.erase(v3.begin()+1);//删除v3第二个元素
cout<<"v3 = ";
while(it3 != v3.end())
{
cout<<*it3<<" ";
++it3;
}
v1.assign(first, end);//将v1清空后为v1赋值,将[first, end)区间里包含的元素赋值给v1
v1.assign(7, 7);//将v1清空后为v1赋值7个7
cout<<endl;
cout<<v.at(4)<<endl;
cout<<v[4]<<endl;
cout<<"v.size() = "<<v.size()<<endl;//v的大小(里边有几个元素)
cout<<"v.capacity() = "<<v.capacity()<<endl;//v的容量
v.resize(20);//指定向量的大小为20
cout<<"v.capacity() = "<<v.capacity()<<endl;
return 0;
}
Vector的两个重要特点
1.vector可以为单向的为增加的元素自动开辟空间,其开辟特点为以2的倍数增长,比如,新构建一个向量V1,为其尾插一个元素,打印其大小和容量为
现在增加4个元素,则容量将变为8
2.由第一个问题引出第二个问题,在使用迭代器时一定要注意向量在增长过程中是否自动扩容了,若果自动扩容,则原来的迭代器都会失效,要重新定义
自动扩容过程是:开辟一个二倍于原来向量的空间,再将原先的元素复制过来
原来的迭代器还指着原来的空间,但是向量的空间已经改变,所以原来的迭代器失效。
以上两条适用于自动扩容过程
容器的分类与各种测试(二)——vector部分用法的更多相关文章
- 容器之分类与各种测试(四)——unordered-multiset
unordered-multiset是不定序关联式容器,其底部是通过哈希表实现功能. (ps:黑色框就是bucket,白色框即为bucket上挂载的元素) 为了提高查找效率,bucket(篮子)的数量 ...
- 容器之分类与各种测试(四)——multiset
multiset是可重复关键字的关联式容器,其与序列式容器相比最大的优势在于其查找效率相当高.(牺牲空间换取时间段) 例程 #include<stdexcept> #include< ...
- 容器之分类与各种测试(三)——stack
stack是栈,其实现也是使用了双端队列(只要不用双端队列的一端,仅用单端数据进出即完成单端队列的功能),由于queue和stack的实现均是使用deque,没有自己的数据结构和算法,所以这俩也被称为 ...
- 容器之分类与各种测试(四)——unordered_set和unordered_map
关于set和map的区别前面已经说过,这里仅是用hashtable将其实现,所以不做过多说明,直接看程序 unordered_set #include<stdexcept> #includ ...
- 容器之分类与各种测试(四)——map
map和set的区别在于,前者key和value是分开的,前者的key不会重复,value可以重复:后者的key即为value,后者的value不允许重复.还有,map在插入时可以使用 [ ]进行(看 ...
- 容器之分类与各种测试(四)——set
set和multiset的去别在于前者的key值不可以重复,所以用随机数作为其元素进行插入时,遇到重复元素就会被拒绝插入(但是程序不会崩溃). 例程 #include<stdexcept> ...
- 容器之分类与各种测试(四)——unordered-multimap
unordered-multiset与unordered-multimap的区别和multiset与multimap的区别基本相同,所以在定义和插入时需要注意 key-value 的类型. 例程 #i ...
- 容器之分类与各种测试(四)——multimap
multiset和multimap的具体区别在于,前者的key值就是自己存储的value,后者的key与value是分开的不相关的. 例程 #include<stdexcept> #inc ...
- 容器之分类与各种测试(三)——queue
queue是单端队列,但是在其实现上是使用的双端队列,所以在queue的实现上多用的是deque的方法.(只要用双端队列的一端只出数据,另一端只进数据即可从功能上实现单端队列)如下图 例程 #incl ...
随机推荐
- hdu 1083 Courses(二分图最大匹配)
题意: P门课,N个学生. (1<=P<=100 1<=N<=300) 每门课有若干个学生可以成为这门课的代表(即候选人). 又规定每个学生最多只能成为一门课的代 ...
- 记一次CTF比赛过程与解题思路-MISC部分
前言 最近好久没更新博客和公众号了,有朋友问是不是在憋大招,但我不好意思说其实是因为最近一段时间太懒了,一直在当咸鱼- 意识到很久没更新这个问题,我是想写点什么的,但好像一直当咸鱼也没啥可分享的,最近 ...
- split,cdn,shell脚本,tmux,记一次往国外服务器传大文件的经历
需求是这样的:将一个大概680M的Matlab数据文件传到国外某所大学的服务器上,服务器需要连接VPN才能访问,由于数据文件太大,而且如果我直接ssh连过去或者用ftp传输,那么中间很可能中断. ps ...
- 简单理解函数声明(以signal函数为例)
这两天遇到一些声明比较复杂的函数,比如signal函数,那我们先简单说说signal函数的用法:(参考<c陷阱与缺陷>) [signal:几乎所有c语言程序的实现过程中都要用到signal ...
- Allure 生成测试报表
Allure官方文档参考地址:https://docs.qameta.io/allure/#_testng 1.在maven中添加依赖并进行相应的配置: <!-- 实现版本控制 --> & ...
- C++ 函数模板实现原理剖析
C++ 函数模板实现机制原理剖析 重点 编译器并不是把函数模板处理成能够处理任意类的函数 编译器从函数模板通过具体类型来产生不同的函数 编译器会对函数模板进行两次编译 (1)在声明的位置对模板代码进行 ...
- Buildroot 用户手册 (中文)
文章目录 I. Getting started 1. About Buildroot 2. System requirements 2.1. Mandatory packages 2.2. Optio ...
- asp.net中挺高性能的24种方法
那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...
- AsExpandable EF多条件查询
我个人学习新技术有一个方法,如果遇到问题会根据以前的经验来寻找一些类似的解决方法.有人会说,如果这个问题在你的学习或者工作生涯中都没有遇到过呢?很简单,通过搜索资料或查阅相关书籍学习别人的经验. 在如 ...
- FZU ICPC 2020 寒假训练 3
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...