STL教程(二)——Vector

如需转载,请注明出处。

Vector和普通数组之间的差异:
普通数组遵循静态方法,意味着它的大小在运行时不能更改,而vector实现动态数组意味着它在附加元素时自动调整大小。

向量与动态数组相同,能够在插入或删除元素时自动调整自身大小,其存储由容器自动处理。向量元素放置在连续存储中,以便可以使用迭代器访问和遍历它们。在向量中,最后插入数据。最后插入需要不同的时间,因为有时可能需要扩展阵列。删除最后一个元素只需要一个恒定的时间,因为没有调整大小。在开头或中间插入和擦除是线性的。

语法:

vector<object_type> v1;  

与向量关联的某些函数是:

一.迭代器

begin() - 返回指向向量中第一个元素的迭代器
end() - 返回一个迭代器,指向跟随向量中最后一个元素的理论元素
rbegin() - 返回指向向量中最后一个元素的反向迭代器(反向开始)。它从最后一个元素移动到第一个元素
rend() - 返回一个反向迭代器,指向向量中第一个元素之前的理论元素(被视为反向结束)
cbegin() - 返回指向向量中第一个元素的常量迭代器。
cend() - 返回一个常量迭代器,指向跟随向量中最后一个元素的理论元素。
crbegin() - 返回一个指向向量中最后一个元素的常量反向迭代器(反向开始)。它从最后一个元素移动到第一个元素
crend() - 返回一个常量反向迭代器,指向向量中第一个元素之前的理论元素(被视为反向结束)
// C++ program to illustrate the 
// iterators in vector 
#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
	vector<int> g1; 

	for (int i = 1; i <= 5; i++) 
		g1.push_back(i); 

	cout << "Output of begin and end: "; 
	for (auto i = g1.begin(); i != g1.end(); ++i) 
		cout << *i << " "; 

	cout << "\nOutput of cbegin and cend: "; 
	for (auto i = g1.cbegin(); i != g1.cend(); ++i) 
		cout << *i << " "; 

	cout << "\nOutput of rbegin and rend: "; 
	for (auto ir = g1.rbegin(); ir != g1.rend(); ++ir) 
		cout << *ir << " "; 

	cout << "\nOutput of crbegin and crend : "; 
	for (auto ir = g1.crbegin(); ir != g1.crend(); ++ir) 
		cout << *ir << " "; 

	return 0; 
} 

输出:

Output of begin and end: 1 2 3 4 5 
Output of cbegin and cend: 1 2 3 4 5 
Output of rbegin and rend: 5 4 3 2 1 
Output of crbegin and crend : 5 4 3 2 1

二.容量

size() - 返回向量中的元素数。
max_size() - 返回向量可容纳的最大元素数。
capacity() - 返回当前分配给向量的存储空间的大小,表示为元素数。
resize() - 调整容器的大小,使其包含'g'元素。
empty() - 返回容器是否为空。
shrink_to_fit() - 减小容器的容量以适应其大小并销毁超出容量的所有元素。
reserve() - 请求向量容量至少足以包含n个元素。
// C++ program to illustrate the 
// capacity function in vector 
#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
	vector<int> g1; 

	for (int i = 1; i <= 5; i++) 
		g1.push_back(i); 

	cout << "Size : " << g1.size(); 
	cout << "\nCapacity : " << g1.capacity(); 
	cout << "\nMax_Size : " << g1.max_size(); 

	// resizes the vector size to 4 
	g1.resize(4); 

	// prints the vector size after resize() 
	cout << "\nSize : " << g1.size(); 

	// checks if the vector is empty or not 
	if (g1.empty() == false) 
		cout << "\nVector is not empty"; 
	else
		cout << "\nVector is empty"; 

	// Shrinks the vector 
	g1.shrink_to_fit(); 
	cout << "\nVector elements are: "; 
	for (auto it = g1.begin(); it != g1.end(); it++) 
		cout << *it << " "; 

	return 0; 
} 

输出:

Size : 5
Capacity : 8
Max_Size : 4611686018427387903
Size : 4
Vector is not empty
Vector elements are: 1 2 3 4

三.元素访问

reference operator [g]  - 返回向量中位置“g”处元素的引用
at(g) - 返回向量中位置“g”处元素的引用
front() - 返回对向量中第一个元素的引用
back() - 返回对向量中最后一个元素的引用
data() - 返回指向内部由向量使用的内存数组的直接指针,以存储其拥有的元素。
// C++ program to illustrate the 
// element accesser in vector 
#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 
	vector<int> g1; 

	for (int i = 1; i <= 10; i++) 
		g1.push_back(i * 10); 

	cout << "\nReference operator [g] : g1[2] = " << g1[2]; 

	cout << "\nat : g1.at(4) = " << g1.at(4); 

	cout << "\nfront() : g1.front() = " << g1.front(); 

	cout << "\nback() : g1.back() = " << g1.back(); 

	// pointer to the first element 
	int* pos = g1.data(); 

	cout << "\nThe first element is " << *pos; 
	return 0; 
} 

输出:

Reference operator [g] : g1[2] = 30
at : g1.at(4) = 50
front() : g1.front() = 10
back() : g1.back() = 100
The first element is 10

四.修改器

assign() - 它通过替换旧元素为向量元素赋值
push_back() - 它将元素从后面推入向量
pop_back() - 用于从后面弹出或删除矢量中的元素。
insert() - 它在元素之前在指定位置插入新元素
erase() - 用于从指定的位置或范围中删除容器中的元素。
swap() - 用于将一个向量的内容与另一个相同类型的向量交换。尺寸可能不同。
clear() - 用于删除向量容器的所有元素
emplace() - 它通过在位置插入新元素来扩展容器
emplace_back() - 用于将新元素插入向量容器中,新元素被添加到向量的末尾
// C++ program to illustrate the 
// Modifiers in vector 
#include <bits/stdc++.h> 
#include <vector> 
using namespace std; 

int main() 
{ 
	// Assign vector 
	vector<int> v; 

	// fill the array with 10 five times 
	v.assign(5, 10); 

	cout << "The vector elements are: "; 
	for (int i = 0; i < v.size(); i++) 
		cout << v[i] << " "; 

	// inserts 15 to the last position 
	v.push_back(15); 
	int n = v.size(); 
	cout << "\nThe last element is: " << v[n - 1]; 

	// removes last element 
	v.pop_back(); 

	// prints the vector 
	cout << "\nThe vector elements are: "; 
	for (int i = 0; i < v.size(); i++) 
		cout << v[i] << " "; 

	// inserts 5 at the beginning 
	v.insert(v.begin(), 5); 

	cout << "\nThe first element is: " << v[0]; 

	// removes the first element 
	v.erase(v.begin()); 

	cout << "\nThe first element is: " << v[0]; 

	// inserts at the beginning 
	v.emplace(v.begin(), 5); 
	cout << "\nThe first element is: " << v[0]; 

	// Inserts 20 at the end 
	v.emplace_back(20); 
	n = v.size(); 
	cout << "\nThe last element is: " << v[n - 1]; 

	// erases the vector 
	v.clear(); 
	cout << "\nVector size after erase(): " << v.size(); 

	// two vector to perform swap 
	vector<int> v1, v2; 
	v1.push_back(1); 
	v1.push_back(2); 
	v2.push_back(3); 
	v2.push_back(4); 

	cout << "\n\nVector 1: "; 
	for (int i = 0; i < v1.size(); i++) 
		cout << v1[i] << " "; 

	cout << "\nVector 2: "; 
	for (int i = 0; i < v2.size(); i++) 
		cout << v2[i] << " "; 

	// Swaps v1 and v2 
	v1.swap(v2); 

	cout << "\nAfter Swap \nVector 1: "; 
	for (int i = 0; i < v1.size(); i++) 
		cout << v1[i] << " "; 

	cout << "\nVector 2: "; 
	for (int i = 0; i < v2.size(); i++) 
		cout << v2[i] << " "; 
} 

输出:

The vector elements are: 10 10 10 10 10 
The last element is: 15
The vector elements are: 10 10 10 10 10 
The first element is: 5
The first element is: 10
The first element is: 5
The last element is: 20
Vector size after erase(): 0

Vector 1: 1 2 
Vector 2: 3 4 
After Swap 
Vector 1: 3 4 
Vector 2: 1 2

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值