STL之vector常用函数笔记

学会一些常用的vector就足够去刷acm的题了

ps:for(auto x:b) cout<<x<<" ";是基于范围的for循环,只有C++11以上的版本才支持。

vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。

  • 构造函数

  • 增加函数

  • 删除函数

  • 遍历函数

  • 判断函数

  • 大小函数

构造函数

  • vector():创建一个空vector
  • vector(int nSize):创建一个vector,元素个数为nSize
  • vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
初始化有很多种我这里只列出几种常见,实用的
(1): vector<int> ilist1;     默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。 (2): vector<int> ilist2(ilist); vector<int> ilist2  = ilist;  两种方式等价 ,ilist2 初始化为ilist 的拷贝,ilist必须与ilist2 类型相同,也就是同为int的vector类型,ilist2将具有和ilist相同的容量和元素 #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6};
vector<int> b(a);
for(auto x:b)
cout<<x<<" ";
return 0;
} 1 2 3 4 5 6
Process returned 0 (0x0) execution time : 0.101 s
Press any key to continue. (3): vector<int> ilist = {1,2,3.0,4,5,6,7};  vector<int> ilist {1,2,3.0,4,5,6,7}; ilist 初始化为列表中元素的拷贝,列表中元素必须与ilist的元素类型相容,本例中必须是与整数类型相容的类型,整形会直接拷贝,其他类型会进行类型转换。
用法示例:
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a={1,2,3,4,5,6};
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 2 3 4 5 6
Process returned 0 (0x0) execution time : 0.111 s
Press any key to continue. #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6};
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 2 3 4 5 6
Process returned 0 (0x0) execution time : 0.069 s
Press any key to continue. (4): vector<int> ilist3(ilist.begin()+2,ilist.end()-1); ilist3初始化为两个迭代器指定范围中元素的拷贝,范围中的元素类型必须与ilist3 的元素类型相容,在本例中ilist3被初始化为{3,4,5,6}。注意:由于只要求范围中的元素类型与待初始化的容器的元素类型相容,因此迭代器来自不同的容器是可能的,例如,用一个double的list的范围来初始化ilist3是可行的。另外由于构造函数只是读取范围中的元素进行拷贝,因此使用普通迭代器还是const迭代器来指出范围并没有区别。这种初始化方法特别适合于获取一个序列的子序列。 #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6};
vector<int> b(a.begin(),a.end()-2);
for(auto x:b)
cout<<x<<" ";
return 0;
} 1 2 3 4
Process returned 0 (0x0) execution time : 0.116 s
Press any key to continue. (5): vector<int> ilist4(7); 默认值初始化,ilist4中将包含7个元素,每个元素进行缺省的值初始化,对于int,也就是被赋值为0,因此ilist4被初始化为包含7个0。当程序运行初期元素大致数量可预知,而元素的值需要动态获取的时候,可采用这种初始化方式。 #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6};
vector<int> b(7);
for(auto x:b)
cout<<x<<" ";
return 0;
} 0 0 0 0 0 0 0
Process returned 0 (0x0) execution time : 0.107 s
Press any key to continue. (6):vector<int> ilist5(7,3); 指定值初始化,ilist5被初始化为包含7个值为3的int #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6};
vector<int> b(7,2);
for(auto x:b)
cout<<x<<" ";
return 0;
} 2 2 2 2 2 2 2
Process returned 0 (0x0) execution time : 0.145 s
Press any key to continue.

2.增加函数

  • void push_back(const T& x):向量尾部增加一个元素X
  • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
  • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
void push_back(const T& x):向量尾部增加一个元素X

#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(7);
vector<int> b(7,2);
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 2 3 4 5 7
Process returned 0 (0x0) execution time : 0.119 s
Press any key to continue. iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(7);
a.insert(a.begin()+2,8);
vector<int> b(7,2);
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 2 8 3 4 5 7
Process returned 0 (0x0) execution time : 0.080 s
Press any key to continue. iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(7);
a.insert(a.begin()+2,8);
a.insert(a.begin()+2,4,11);
vector<int> b(7,2);
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 2 11 11 11 11 8 3 4 5 7
Process returned 0 (0x0) execution time : 0.098 s
Press any key to continue.

3.删除函数

  • iterator erase(iterator it):删除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
  • void pop_back():删除向量中最后一个元
  • void clear():清空向量中所有元素
iterator erase(iterator it):删除向量中迭代器指向元素

#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6,7,8,9};
a.erase(a.end()-8);
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 3 4 5 6 7 8 9
Process returned 0 (0x0) execution time : 0.059 s
Press any key to continue. iterator erase(iterator first,iterator last):删除向量中[first,last)中元素 #include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6,7,8,9};
a.erase(a.end()-8,a.begin()+6);
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 7 8 9
Process returned 0 (0x0) execution time : 0.113 s
Press any key to continue. void pop_back():删除向量中最后一个元素
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6,7,8,9};
a.pop_back();
for(auto x:a)
cout<<x<<" ";
return 0;
} 1 2 3 4 5 6 7 8
Process returned 0 (0x0) execution time : 0.106 s
Press any key to continue.

4.遍历函数

  • reference at(int pos):返回pos位置元素的引用
  • reference front():返回首元素的引用
  • reference back():返回尾元素的引用
  • iterator begin():返回向量头指针,指向第一个元素
  • iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6,7,8,9};
// for循环遍历
for(auto x:a)
cout<<x<<" ";
cout<<endl;
// at取应用
for(int i=0;i<a.size();i++)
cout<<a.at(i)<<" ";
cout<<endl;
cout<<*a.begin()<<" "<<*a.end()<<endl;
// 迭代器
for(vector<int>::iterator it=a.begin();it<a.end();it++)
cout<<*it<<" ";
return 0;
}
//
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 0
1 2 3 4 5 6 7 8 9
Process returned 0 (0x0) execution time : 0.078 s
Press any key to continue.

5.判断函数

  • bool empty() const:判断向量是否为空,若为空,则向量中无元素
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6,7,8,9};
vector<int> b;
if(!a.empty())
cout<<"No empty!"<<endl;
if(b.empty())
cout<<"empty!"<<endl;
return 0;
} No empty!
empty! Process returned 0 (0x0) execution time : 0.108 s
Press any key to continue.

6.大小函数

  • int size() const:返回向量中元素的个数
  • int capacity() const:返回当前向量张红所能容纳的最大元素值
  • int max_size() const:返回最大可允许的vector元素数量值
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a{1,2,3,4,5,6,7,8,9,78945};
cout<<a.size()<<endl;
cout<<a.capacity()<<endl;
cout<<a.max_size()<<endl;
return 0;
} 10
10
1073741823 Process returned 0 (0x0) execution time : 0.094 s
Press any key to continue.

STL之vector常用函数笔记的更多相关文章

  1. C++ STL之vector常用指令

    只记载本人在ACM中常用的函数. vector,相当于动态数组,数组大小可变.声明vector以后,自动在内存中分配一块连续的内存空间进行数据存储. vector在内部进行插入.删除操作时间复杂度O( ...

  2. 【STL】string 常用函数

    string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...

  3. Oracle常用函数笔记

    一.字符函数 1.dual 临时表 oracle中的临时变量表,此表只返回第一行第一列 例如:select sysdate from dual 输出:2014-6-9 11:20:39 2.Initc ...

  4. STL数组处理常用函数

    reverse(a,a+n)反转 sort(a,a+n,cmp)排序 unique(a,a+n,cmp)对于有序集合进行去重,返回新数组最后一个元素的指针 next_permutatoin(a,a+n ...

  5. Python常用函数笔记

    1.lambda lambda其实就是一条语句,lambda(x):body.x是lambda函数的参数,参数可以有任意多个(包括可选参数);body是函数体,只能是一个表达式,并且直接返回该表达式的 ...

  6. 「STL中的常用函数 容器」

    占个坑,下午在更 二分操作:lower_bound和upper_bound 存图/数列操作:vector容器 全排列:next_permutation和prev_permutation 字符串转数列: ...

  7. C语言常用函数笔记

    strcmp 比较字符串: sscanf 读取格式化的字符串中的数据: memset 初始化内存的"万能函数",通常为新申请的内存进行初始化工作.对一段内存空间全部设置为某个字符, ...

  8. C++STL中的unique函数解析

    一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重.即”删除”序列中所有相邻的重复元素(只保留一个).此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情 ...

  9. C++——STL之vector, list, deque容器对比与常用函数

    STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...

随机推荐

  1. 大数据篇:ElasticSearch

    ElasticSearch ElasticSearch是什么 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. ...

  2. Python学习笔记.基础一

    Python 语言:解释型.交互式.面向对象.   Python源代码遵循GPL协议   Python标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英 ...

  3. redis作为消息队列的原理

    Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ...

  4. C++ 指针偏移的理解

    //题目:若有程序段int a[5] = { 1, 2, 3, 4, 5 }; int *p = (int *)(&a + 1); printf("%d,%d", *(a ...

  5. Docker深入浅出系列 | 5分钟搭建你的私有镜像仓库

    Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方 ...

  6. React初级坑

    1.使用vscode时,JSX语言会受beauty插件的影响,将标签换行了,如下: 解决办法:将编辑器右下角的语言由javascript改为javascript react就行了.

  7. swagger2 Illegal DefaultValue null for parameter type integer

    问题,为了方便调试,引入了swagger2,但是在第一次访问的时候总是报 Illegal DefaultValue null for parameter type integer 让人看着很不输入 定 ...

  8. React利用Antd的Form组件实现表单功能(转载)

    一.构造组件 1.表单一定会包含表单域,表单域可以是输入控件,标准表单域,标签,下拉菜单,文本域等. 这里先引用了封装的表单域 <Form.Item /> 2.使用Form.create处 ...

  9. 原创】Java并发编程系列2:线程概念与基础操作

    [原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...

  10. Python3学习之路~10.1 多进程、进程间通信、进程池

    一 多进程multiprocessing multiprocessing is a package that supports spawning processes using an API simi ...