STL之vector(不定长数组)
vector就是一个不定长数组,另外它把一些常用操作“封装”在了vector类型内部。例如,若a是一个vector,可以用a.size()读取它的大小,a.resize()改变大小,a.push_back()向尾部添加元素,a.pop_back()删除最后一个元素,clear()清空,empty测试是否为空。
vector是一个模板类,所以需要用vector<int> a或者vector<double> b这样的方式来声明一个vector。vector<int>是一个类似于 int a[]的整数数组,而vector<string>就是一个类似于string a[]的字符串数组,vector可以直接赋值,也可作为函数的参数或返回值,而无需像传递数组那样另外用一个变量指定元素个数。
一. vector用法:
1.头文件:#include<vector>
2. vector声明及初始化
vector<int>::iterator it;//定义一个迭代器
vector<int> vec; //声明一个int型向量
vector<string>v2;// vector元素为string型
vector<node>v3;//入队元素为结构体型,结构体可以自行定义
vector<); //声明一个初始大小为5的int向量
vector<, ); //声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp); //声明并用tmp向量初始化vec向量
vector<); //用向量vec的第0个到第2个值初始化tmp
] = {, , , , };
vector<); //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector<], &arr[]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
3. vector基本操作
v1.push_back() //在数组的最后添加一个数据 v1.pop_back() //去掉数组的最后一个数据 v1.front() //返回第一个元素(栈顶元素) v1.begin() //得到数组头的指针,用迭代器接受 v1.end() //得到数组的最后一个单元+1的指针,用迭代器接受 v1.clear() // 移除容器中所有数据 v1.empty() //判断容器是否为空 v1.erase(pos) //删除pos位置的数据 v1.erase(beg,end)// 删除[beg,end)区间的数据 v1.size() //回容器中实际数据的个数 v1.insert(pos,data) //在pos处插入数据
举例:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector <int> v; //定义vector
vector<int>::iterator it; //定义一个vector迭代器
; i >= ; i--) //插入数据
v.push_back(i);
cout<<"输出:";
for(it=v.begin();it!=v.end();it++) //输出迭代器的值
cout<<*it<<" ";
cout<<endl;
it-=;
cout<<"最后一个的值为:"<<*it<<" "<<endl;
v.erase(it); //删除最后一个元素
cout <<"元素个数:" <<v.size() << endl; //输出元素个数
sort(v.begin(), v.end()); //vector排序
cout<<"排序后:";
for(it=v.begin();it!=v.end();it++) //输出vector元素
cout << *it << " ";
cout<<endl;
v.insert(v.begin(),) ; //在pos位置插入一个elem
cout<<"第一个元素为:" <<v.front()<<endl;//输出第一个元素
v.pop_back(); //去掉最后一个元素
cout << "元素个数:" <<v.size() << endl;//输出元素个数
v.clear(); //vector清空
cout <<"清空后元素个数:" << v.size() << endl; //输出元素个数
;
}
https://blog.csdn.net/weixin_35929051/article/details/52661619
(1). 容量
- 向量大小: vec.size();
- 向量最大容量: vec.max_size();
- 更改向量大小: vec.resize();
- 向量真实大小: vec.capacity();
- 向量判空: vec.empty();
- 减少向量大小到满足元素所占存储空间的大小: vec.shrink_to_fit();
(2). 修改
- 多个元素赋值: vec.assign(); //类似于初始化时用数组进行赋值
- 末尾添加元素: vec.push_back();
- 末尾删除元素: vec.pop_back();
- 任意位置插入元素: vec.insert();
- //ve.insert(it,n,e)//在it指向元素的前面添加n个元素e
- ve.insert(ve.end(),1,2);//相当于在尾部添加1个2
- ve.insert(ve.begin(),1,0);//在头部添加1个0
- 任意位置删除元素: vec.erase();
- 交换两个向量的元素: vec.swap();
- 清空向量元素: vec.clear();
(3)迭代器
- 开始指针:vec.begin();
- 末尾指针:vec.end(); //指向最后一个元素的下一个位置
- 指向常量的开始指针: vec.cbegin(); //意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
- 指向常量的末尾指针: vec.cend();
(4)元素的访问
- 下标访问: vec[1]; //并不会检查是否越界
- at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界,是则抛出out of range异常
- 访问第一个元素: vec.front();
- 访问最后一个元素: vec.back();
- 返回一个指针: int* p = vec.data(); //可行的原因在于vector在内存中就是一个连续存储的数组,所以可以返回一个指针指向这个数组。这是是C++11的特性。
(4)算法
- 遍历元素
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
cout << *it << endl;
//或者
for (size_t i = 0; i < vec.size(); i++) {
cout << vec.at(i) << endl;
}
- 元素翻转
#include <algorithm> reverse(vec.begin(), vec.end());
- 元素排序
#include <algorithm>
sort(vec.begin(), vec.end()); //采用的是从小到大的排序
//如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:
bool Comp(const int& a, const int& b) {
return a > b;
}
sort(vec.begin(), vec.end(), Comp);
二.重要应用--vector二维使用
例如 :
vector<]; //第一维的大小是固定的,不超过maxn---30,但第二维的大小是不固定的
int t,n;
cin>>n;
;i<n;i++) //插入值
{
cin>>t;
a[i].push_back(t);
}
//c++vector二维数组常用写法 vector<vector<);//定义行数为3列数不定的二维数组 a.size();//返回二维数组的行数 a[].size();//返回二维数组第一行的列数
vector<string>v2;// vector元素为string型
STL之vector(不定长数组)的更多相关文章
- STL之Vector(不定长数组)
vector是同一种对象的集合,每一个对象都有一个相应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. 引入头文件 #include<vector> 1.vec ...
- (STL初步)不定长数组:vector
STL是指C++的标准模板库.(存储着一些常用的算法和容器) vector是一个不定长数组.它把一些常用的操作”封装“在vector类型内部. 例如,a是一个vector.1对元素的操作有,可以用a. ...
- 【STL初步】不定长数组:vector + 集合:set + 映射:map
一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...
- 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结
#include<iostream> #include<cstdio> #include<string> #include<vector>//不定长数组 ...
- C++如何返回不定长数组
起初遇到这个问题的时候便得知无法返回,那么为了达到相同的目的,该怎么办呢? 第一个想法便是 int * void() { int * want = new int[size]; //......do ...
- C语言格式化输入不定长数组
先随便写写,有空再整理. 直接贴代码 #include <stdio.h> #include <stdlib.h> //从一行标准输入中格式化输入一个不定长数组 void in ...
- 【OI】C++STL 不定长数组 vector
Vector 本来是向量的意思,只不过在用法上类似于一个不限长度的数组. 定义语法:vector<数据类型> 名称; 一.头文件:<vector> (bits/stdc++请忽 ...
- 不定长数组 Vector的 应用
#include<cstdio> #include<vector> using namespace std; vector<int>a; int main() { ...
- UVa101 The Blocks Problem(不定长数组vector)
The Blocks Problem 书上的一道例题,代码思路比较清晰,可以看懂. 相关知识: 若a是一个vector,则: a.size():读取它的大小 a.resize():改变大小 a.pus ...
随机推荐
- 使用foreach获取数据列表的全部信息
先把代码列出来:(在admin/listAdmin.php中) <?php foreach($rows as $row):?> //注意,这里的foreach($rows as $row) ...
- Tensorflow递归神经网络学习练习
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data #载入数据集mnist = inpu ...
- 通过iOS中的按钮来触发html文件中按钮所触发的函数
html文件的代码 <!DOCTYPE html> <html> <head> <title>标题</title> </head> ...
- 项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据
1 课程计划 菜单数据管理 权限数据管理 角色数据管理 用户数据管理 在realm中动态查询用户权限,角色 Shiro中整合ehcache缓存权限数据 2 菜单数据添加 2.1 使用c ...
- latex公式怎么变成图片格式
由于这几天正在复习高中的数学,想写一些博客记录一下,发现数学公式的输入是一个问题,后来知道了latex,去youtube学习了一点入门教程发现挺简单的,不过有一个问题,latex生成的是pdf格式啊, ...
- Elasticsearch suggester搜索建议初步
环境 Elasticsearch 2.3.5 Elasticsearch-ik-plugin 实现 搜索建议的对象 假设有以下两个json对象,需要对其中tags字段进行搜索建议: //对象Produ ...
- Java泛型读书笔记 (二)
关于Java泛型擦除后,继承一个泛型类带来的问题 有如下泛型类Pair: public class Pair<T> { private T second; private T first; ...
- sql 根据指定字符截取前面几个字符
1.找到指定字所在的位置并且减去多少是要截取的字符长度 CharIndex('元',product_name)-3) 2.截取 SUBSTRING(product_name, CharIndex('元 ...
- WebAPI 请求跨域问题
本人采用的是利用CORS解决跨越问题. 首先利用Nuget 安装“microsoft.aspnet.webapi.cors”,如下图所示: 紧接着,在WebApiConfig文件中加入 config. ...
- Oauth Client Credentials Grant
http://www.cnblogs.com/dudu/p/4569857.html OAuth真是一个复杂的东东,即使你把OAuth规范倒背如流,在具体实现时也会无从下手.因此,Microsoft. ...