文章目录
C++ Vector知识点
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector是STL的动态数组,在运行时能根据情况需要改变数组的大小。由于它是以数组形式存储,也就是说它的内存空间是连续的,所以索引可以在常数时间内完成,但是在中间进行插入和删除会造成内存块的复制。另外,如果数组后面的内存空间不够,需要申请一块足够大的内存,会影响vector的效率,同时使迭代器失效。
先看下下列函数基本功能,然后在目录查找,定位到相应函数,有相应的代码片段和解释
头文件
#include<iostream>
#include<vector>
using namespace std;
定义
- 定义int型
- 定义string型
- 定义结构型数组
- 还可以定义多维数组,例如定义一个二维数组:
vector <int> a[MAXN];
其第一维大小是固定的MAXN,第二维是动态的。
vector<int> vec; //定义int型数组
vector<string> vec1;//定义string型数组
struct STU{
int age;
};
vector<STU> vec2; //定义结构型数组
构造函数
语法:
vector();
vector( size_type num, const TYPE &val );
vector( const vector &from );
vector( input_iterator start, input_iterator end );
C++ Vectors可以使用以下任意一种参数方式构造:
- 无参数 - 构造一个空的vector,
- 数量(num)和值(val) - 构造一个初始放入num个 值为val的元素的Vector
- vector(from) - 构造一个与vector from 相同的vector
- 迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间元素的Vector(注:半开区间).
vector<int> vec; // 空的vector 不能输出
vector<int> vec1(3);//三个元素均为 0
vector<int> vec2(3,12);//三个元素均为1
vector<int> vec3(vec2);//将vec2的元素初始化给vec3
//参数类型要相同
//用迭代器初始化
vector<int>::iterator ite = vec2.begin();//指向vec的头
vector<int>::iterator ite1 = vec2.end(); //指向vec的尾
vector<int> vec4(ite, ite1);
输出结果:
属性
1.容量(重新分配,则迭代器失效)
语法:
size_type capacity();
- 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
- capacity() 函数 返回当前vector在重新进行内存分配以前所能容纳的元素数量.
vector<int> vec;
cout << vec.capacity() << endl;
vector<int> vec1(3);
cout << vec1.capacity() << endl;
vec1.push_back(1); //在vector尾部加一个元素
cout << vec1.capacity() << endl;
输出结果:
语法:
void reserve( size_type size );
- 设置Vector最小的元素容纳数量(只能变大,不能变小)(设置多大就是多大)(重新分配后,迭代器失效)
- reserve()函数为当前vector预留至少共容纳size个元素的空间.(译注:实际空间可能大于size)
vector<int> vec2(3);//三个元素均为零
cout << vec2.capacity() << endl;
vec2.reserve(10);
cout << vec2.capacity() << endl;
输出结果:
语法:
size_type size();
- 返回Vector元素数量的大小
- size() 函数返回当前vector所容纳元素的数目
vector<int> vec3(3,12);
vec3.reserve(5);//当前vec3容器为5,元素为3
cout << vec3.size() << endl;
输出结果:
2.大小
语法:
void resize( size_type size, TYPE val );
- 改变Vector元素数量的大小
- resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val
vector<int> vec3(3,12);
vec3.reserve(5);//当前vec3容器为5,元素为3
cout << vec3.size() << endl;
vec3.resize(4); //只改变容器元素的数量,不改变容器空间大小
cout << vec3.size() << endl;
cout << vec3.capacity() << endl;
输出结果:
语法:
bool empty();
- 判断Vector是否为空(返回true时为空)
- 如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false.例如,以下代码清空一个vector,并按照逆序显示所有的元素:
vector<int> vec;
vector<int> vec1(3);
cout << vec.empty() << endl;
cout << vec1.empty() << endl;
输出结果:
语法:
void clear();
- 清空所有元素
- clear()函数删除当前vector中的所有元素.
vector<int> vec(3,2);
cout << vec.capacity() << endl;
cout << vec.size() << endl;
vec.clear();
cout << vec.capacity() << endl;
cout << vec.size() << endl;
输出结果:
操作
1.增
语法:
void push_back( const TYPE &val );
- 在Vector最后添加一个元素
- push_back()添加值为val的元素到当前vector末尾
vector<int> vec;
for(int i=10;i<20;i++){
vec.push_back(i); //在vec尾部依次加 i的
}
for(int i=0;i<10;i++){
cout << vec[i] << " ";
}
输出结果:
语法:
iterator insert( iterator loc, const TYPE &val );
void insert( iterator loc, size_type num,