向量Vector -- STL库

Horizon 摸鱼 2024-03-08 11:22:33 2024-03-20 18:23:24 6

一个封装了动态大小数组的STL容器,可以存放任意类型的数据。

头文件

#include

构造

  1. vector <类型> 标识符;

  2. vector <类型> 标识符(最大容量);

  3. vector <类型> 标识符(最大容量, 初始值);

  4. int a[3]={1, 2, 3};

    vector vec(a, a+3); //将a数组的内容放入vec中

  5. vector <vector <类型> > 标识符; //二维向量

常用函数

注:文末有Vector全部函数表格

void push_back(const T& x) 向量尾部增加一个元素X
void pop_back() 删除向量中最后一个元素
reference at(int pos) 返回pos位置元素的引用
iterator begin() 返回向量头指针,指向第一个元素
iterator end() 返回向量尾指针,指向向量最后一个元素的下一个位置
int size() const 返回向量中元素的个数
void clear() 清空向量中所有元素
bool empty() const 判断向量是否为空,若为空,则向量中无元素

实例

构造与插入删除

#include<bits/stdc++.h>
using namespace std;
template <class T> //定义函数模板 

//用于输出vector全部内容的函数 
void printvec(const vector <T> & v) {
	//利用迭代器控制指向位置 
	for(auto it = v.begin(); it!=v.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
} 

int main(){
	// 1、构造vector后单独插入
	vector <int> vec; 
	vec.push_back(2);
	cout << "1: "; printvec(vec);
	
	// 2、利用已有数组构造vector 
	int a[5] = {1, 2, 3, 4, 5};
	vector <int> v(a, a+5);
	cout << "2: "; printvec(v); 
	
	//3、 二维数组长度
	//3.1、 两个迭代器相减求长度 
	cout << "3: " << v.end()-v.begin();  
	//3.2、 size()函数求长度
	cout << " " << v.size() << endl;
	
	//4、在末尾增加元素
	v.push_back(6); 
	cout << "4: "; printvec(v); 
	
	//5、删除末尾元素
	v.pop_back();
	cout << "5: "; printvec(v);  
	
	//6、在 begin()+3 的位置插入 12
	v.insert(v.begin()+3, 12); 
	cout << "6: "; printvec(v);  
	
	//7、删除 begin()+3 的元素
	v.erase(v.begin()+3);
	cout << "7: "; printvec(v);  
	return 0;
}

运行结果

image.png

二维向量

#include<bits/stdc++.h>
using namespace std;

int main() {
    vector<vector<int>> v(3);    //v里有3个vector<int>容器
    //插入元素 
    for(int i=0; i<3; i++) {
    	for(int j=0; j<5; j++) {
    		v[i].push_back(j);
		}
	} 
	//输出 
	for(int i=0; i<3; i++) {
    	for(int j=0; j<5; j++) {
    		cout << v[i][j] << " ";
		}
		cout << endl;
	}
    return 0;
}

运行结果

image.png 既然已经在vector里面塞vector了,何不再大胆点? vector里放pair, set, map等都可以。

全部函数

构造函数

vector() 创建一个空vector
vector(int nSize) 创建一个vector,元素个数为nSize
vector(int nSize,const t& t) 创建一个vector,元素个数为nSize,且值均为t
vector(const vector&) 复制构造函数
vector(begin,end) 复制[begin,end)区间内另一个数组的元素到vector中

增加函数

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
iterator insert(iterator it,const_iterator first,const_iterator last) 向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

删除函数

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

遍历函数

reference at(int pos) 返回pos位置元素的引用
reference front(): 返回首元素的引用
reference back() 返回尾元素的引用
iterator begin() 返回向量头指针,指向第一个元素
iterator end() 返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin() 反向迭代器,指向最后一个元素
reverse_iterator rend() 反向迭代器,指向第一个元素之前的位置

判断函数

bool empty() const 判断向量是否为空,若为空,则向量中无元素

大小函数

int size() const 返回向量中元素的个数
int capacity() const 返回当前向量所能容纳的最大元素值
int max_size() const 返回最大可允许的vector元素数量值

其他函数

void swap(vector&) 交换两个同类型向量的数据
void assign(int n,const T& x) 设置向量中前n个元素的值为x
void assign(const_iterator first,const_iterator last) 向量中[first,last)中元素设置成当前向量元素
{{ vote && vote.total.up }}

共 3 条回复

bc11

我哩个都

厉害

root 站长

棒~

Yichen

6