STL—vector

作者: qiqi 分类: c++ 发布时间: 2024-08-09 13:52

<vector> 是 C++ STL 中一个非常有用的容器,它提供了动态数组的功能,使得元素的添加和删除变得更加灵活和方便。

一、vector容器的定义和初始化

vector<int> vec1; // 空的vector,数据类型为int
vector<int> vec2(4); // 4个值为0的vector
vector<int> vec3 (4,10); // 4个值为10的vector [10 10 10 10]
vector<int> vec4 (vec3.begin(),vec3.end()); // [10 10 10 10]
vector<int> vec5 (vec3); ////将向量vec3赋值给向量vec5,即向量vec5等于向量vec3
vector<int> vec6 = {10, 20, 30, 40}; // [10 20 30 40]

int b[]={1,2,3,4,5,6,7};
vector<int> vec7(b,b+7);//从数组中获得初值

二、常用内置函数
1.assign()函数,对已定义好的vector向量进行赋值。比如:
a.assign(b.begin(), b.begin()+3); //将b的下标为0-2的元素赋值给向量a
a.assign(4,2); //使向量a变为长度为4且值为2

2.back() 函数。返回vector的最后一个元素

3.front()函数。返回vector的第一个元素

4.a[i]。返回a的第i个元素,当且仅当a存在

5.clear()函数。清空vector中的元素

6.empty()函数。//判断向量vecotr是否为空,若为空空则返回true,非空则返回false。

7.push_back()函数。向vector的最后插入一个新的元素。例如:
a.push_back(5); //在向量a的最后插入一个元素,其值为5。

8.pop_back() 函数。删除vector 中最后一个元素。

9.erase()函数。删去容器中指定位置的元素,容器的size(大小)会改变,但是容器的容量不变。例如:
a.erase(a.begin(), a.end()); //删除a向量中全部元素
a.erase(a.begin(), a.begin()+3);//删除a向量中下标0-2共三个元素

10.insert()函数。在指定位置插入新元素。
v2.insert(v2.begin(),20);//在指定位置插入数据
v2.insert(v2.begin(),3,10);//在指定位置插入多次重复数据
v2.insert(v2.begin(),v1.begin(),v1.end());//在指定位置插入另外一个vecotr的数据

11.size()函数。返回向量中元素的个数

12.capacity()函数。在发生realloc(动态分配)前能允许的最大元素数,即预分配的内存空间。

13.resize()函数。调整元素个数。例如:
a.resize(10);//将a的现有元素个数调整至10个,多则删,少则补,其值随机
a.resize(10, 2);//将a的现有元素个数调整至10个,多则删,少则补,其值为2

14.reserve() 函数。
a.reserve(100); //将a的容量扩充至100

15.swap() 函数
a.swap(b); //b为向量,将a中的元素和b中的元素整体交换

16.vector比较操作。
a == b; //相等
a > b; //大于
a >= b; 大于等于
a < b; //小于
a <= b; //小于等于
a != b; //不等于

三、常用的操作函数
1.sort()函数。
sort(a.begin(), a.end()); //对向量a进行从小到大排序

2.reverse() 函数
//对a中的元素从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列 reverse(a.begin(), a.end()); //如a中元素为1,3,2,4,倒置后为4,2,3,1

3.copy() 函数
//把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素 copy(a.begin(), a.end(), b.begin()+1);

4.find() 函数
//在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10, //若存在返回其在向量中的下标,不存在则返回end(),即向量最后一个元素下标加一 find(a.begin(), a.end(), 4);

四、vector的遍历
1.重载[]

       for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}

2.迭代器

//正向迭代器
vector<int>::iterator it = v1.begin();
while(it != v1.end())
{
cout << *it << ” “;
it++;
}
cout << endl;

 

//反向迭代器
|vector<int>::reverse_iterator rit = v1.rbegin();
while (rit != v1.rend())
{
cout << *rit << ” “;
rit++;
}
cout << endl;

3.范围for

for (auto i:v1)
{
cout << i << ” “;
}
cout << endl;

 

五、容量操作

 

Name

Description

size

返回当前vector使用数据量的大小

max_size

返回vector最大可用的数据量

resize

调整vector中的元素个数

capacity

返回vector中总共可以容纳的元素个数

empty

测试vector是否是空的

reserve

控制vector的预留空间

shrink_to_fit

减少capacity到size的大小

void vector_test3()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);

cout << “v1.size =” << v1.size() << endl;
cout << “v1.capacity =” << v1.capacity() << endl;

v1.reserve(30);
cout << “v1.size =” << v1.size() << endl;
cout << “v1.capacity =” << v1.capacity() << endl;

v1.resize(20);
cout << “v1.size =” << v1.size() << endl;
cout << “v1.capacity =” << v1.capacity() << endl;

v1.resize(35);
cout << “v1.size =” << v1.size() << endl;
cout << “v1.capacity =” << v1.capacity() << endl;

v1.shrink_to_fit();
cout << “v1.size =” << v1.size() << endl;
cout << “v1.capacity =” << v1.capacity() << endl;
}

四、增删查改

接口函数功能说明
assign新内容覆盖旧内容并调整size
push_back尾插
pop_back尾删
insert任意位置插入
erase任意位置删除
swap和另一个vector交换数据
clear清空数据

五、迭代器

Name

Description

begin

返回指向迭代器第一个元素的指针

end

返回指向迭代器最后一个元素的指针

rbegin

返回迭代器逆序第一个元素的指针

rend

返回迭代器逆序最后一个元素的指针

cbegin

返回常量迭代器的第一个元素的指针

cend

返回常量迭代器的最第一个元素的指针

crbegin

返回常量迭代器逆序的第一个元素的指针

crend

返回常量迭代器逆序的最后一个元素的指针

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云