C++基础——STL——Vector

Vector

1. 定义:

vector<typename> name;

相当于定义一个一维数组 name[SIZE],只不过其长度可以根据需要进行变化,就是 “变长数组”,示例如下:

vector<int> name;
vector<double> name;
vector<char> name;
vector<node> name; // node是结构体类型
//如果 typename 是 vector:
vector<vector<int> > name;

vector 数组的定义:

vector<int> vi[100];

vi[0] ~ vi[99] 中每一个都是 vector 容器,这种写法的一维长度已经固定为 arraySize,另一维才是 “变长”。

2. Vector 容器内元素的访问

(1) 通过 下标 访问

     对于 vector<typename> vi; 的 vector 容器来说,直接访问 vi[index] 即可

(2) 通过 迭代器 访问

     迭代器可以理解为一种类似 指针 的东西,定义如下:

vector<typename>::iterator it;
// typename 为 int 和 double 的举例:
vector<int>::iterator it;
vector<double>::iterator it;

通过 *it 访问 vector 里的元素

示例,通过类似下标和指针访问数组的方式来访问容器内的元素:

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
    vector<int> vi;
    for(int i = 1; i <= 5; i++){
        vi.push_back(i); // push_back(i) 在 vi 的末尾添加元素 i,即依次添加 1,2,3,4,5   
    }
    // vi.begin() 为取 vi 的首元素的地址,而 it 指向这个地址
    vector<int>::iterator it = vi.begin();
    for(int i = 0; i < 5; i++){
        printf("%d ", *(it + i)); // 输出 vi[i]
    }
    return 0;
}

迭代器还实现了两种 自加操作:++it 和 it++(自减操作同理),有了另一种 遍历 vector 中元素的写法:

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
	vector<int> vi;
	for(int i = 1; i <= 5; i++){
		vi.push_back(i);
	}
	// vector 的迭代器不支持 it < vi.end() 写法,因此循环条件只能用 it != vi.end()
	for(vector<int>::iterator it = vi.begin(); it != vi.end(); it++){
		printf("%d ", *it);
	}
	return 0;
}

3. vector 常用函数

(1)push_back()

扫描二维码关注公众号,回复: 5104044 查看本文章

         push_back(x) 就是在 vector 后面添加一个元素 x

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
	vector<int> vi;
	for(int i = 1; i <= 5; i++){
		vi.push_back(i);
	}
	for(int i = 0; i < vi.size(); i++){
		printf("%d ", vi[i]);
	}
	return 0;
}

(2)pop_back

         删除 vector 的尾元素

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
	vector<int> vi;
	for(int i = 1; i <= 5; i++){
		vi.push_back(i);
	}
	vi.pop_back();
	for(int i = 0; i < vi.size(); i++){
		printf("%d ", vi[i]);
	}
	return 0;
}

(3)size()

          获得 vector 中元素的个数,返回 unsigned 类型

(4)clear()

          清空 vector 中的所有元素

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
	vector<int> vi;
	for(int i = 1; i < 5; i++){
		vi.push_back(i);
	}
	vi.clear();
	printf("%d", vi.size());
	return 0;
}

(5)insert()

         insert(it, x) 用来向 vector 的任意迭代器 it 处插入一个元素 x

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
	vector<int> vi;
	for(int i = 1; i <= 5; i++){
		vi.push_back(i);
	}
	vi.insert(vi.begin() + 2, -1); // 将 -1 插入到 vi[2] 的位置
	for(int i = 0; i < vi.size(); i++){
		printf("%d", vi[i]);
	}
	return 0;
}

(6)erase()

         ① 删除 单个 元素:erase(it) 即为删除 迭代器为 it 处的元素

#include <stdio.h>
#include <vector>
using namespace std;
int main(){
	vector<int> vi;
	for(int i = 1; i <= 5; i++){
		vi.push_back(i);
	}
	// 删除 4
	vi.erase(vi.begin()+3);
	for(int i = 0; i < vi.size(); i++){
		printf("%d ", vi[i]);
	}
	return 0;
}

          ② 删除一个区间内的所有元素:erase(first, last) 即删除 [first, last) 内所有的元素

4. vector 的常见用途

(1)储存数据

         ① vector 本身可以作为数组使用,而且在一些 元素个数不确定 的场合可以很好地节省空间

         ② 更方便的处理 最后一个满足条件的数据后面不输出额外的空格,可以先用 vector 记录所有需要输出的数据,然后输出。

(2)用 邻接表 存储 图

——摘抄自《算法笔记》

猜你喜欢

转载自blog.csdn.net/gsj9086/article/details/86645512