【C++】-- STL之vector详解

本文详细介绍了C++标准库中的vector容器,包括其构造、元素访问、迭代器操作、容量管理、插入与删除元素、find()函数、swap()函数以及迭代器失效的情况和解决办法。vector作为动态数组,提供了灵活的元素管理和访问,但插入和删除操作可能导致迭代器失效,需要注意迭代器更新。此外,还展示了如何使用模板函数PrintVector()打印不同类型vector的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、vector类

二、vector类成员 

 1.vector类对象构造

 2.vector元素访问符

 3.vector迭代器

 4.vector模板

 5.vector拷贝构造

 6.vector容量

(1)vector增容机制 

(2)reserve()和resize()

(3)size()

(4)empty()

 7.vetor尾插和尾删

 8.vector在任意位置插入和删除

(1)插入 

(2)删除 

9.find()

10.swap() 

 三、迭代器失效

1.迭代器失效的情况

2.如何解决迭代器失效


一、vector类

vecotr是可以改变大小的数组的序列容器,其特点有:

(1)vector采用连续空间来存储元素,可以使用下标访问vector元素,访问元素和数组一样方便。vector大小可以动态改变,而且会被容器自动处理,这一点数组无法做到。

(2)vector使用动态分配分配数组来存储元素,插入新元素时,vector数组为了增加存储空间,会分配一个新数组,再把所有元素全部移动到这个数组里,代价相对高一些。

(3)vector会分配额外的空间来满足可能的增长,因为分配的存储空间比实际需要的的存储空间更大。vector以动态增长的方式管理存储空间。

(4)vector在访问元素、末尾添加删除元素时很高效,在其他位置插入删除需要挪动元素,效率低。

二、vector类成员 

 1.vector类对象构造

//构造空的vector
explicit vector (const allocator_type& alloc = allocator_type());
	
//构造一个vector,有n个元素,每个元素值为val
explicit vector (size_type n, const value_type& val = value_type(),
                 const allocator_type& alloc = allocator_type());	

//构造一个vector,值为InputIterator的first到last之间的元素
template <class InputIterator>
         vector (InputIterator first, InputIterator last,
                 const allocator_type& alloc = allocator_type());	

//使用x拷贝构造一个vector
vector (const vector& x);
#include<iostream>
#include<vector>

using namespace std;
int main()
{   
    vector<int> v;//构造一个没有元素的空容器
    vector<int> v1(3, 5);//构造一个有3个元素的容器,每个元素的值都为5
    vector<int> v2(v1.begin(),v1.end());//构造一个从v1.begin()到v1.end()顺序及相同值的容器
    vector<int> v3(v2);//以与v2相同的顺序及值拷贝构造一个容器

    //插入4个元素
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

    return 0;
}

 2.vector元素访问符

      reference operator[] (size_type n);      //可读可写
const_reference operator[] (size_type n) const;//只读

vector使用operator[ ]遍历元素,像数组一样:

	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;

 3.vector迭代器

迭代器是一种容器可以统一使用的遍历方式,因此vector也支持使用迭代器遍历 

      iterator begin();      //可读可写
const_iterator begin() const;//只读

      iterator end();        //可读可写
const_iterator end() const;  //只读

      reverse_iterator rbegin();       //反向迭代器 可读可写
const_reverse_iterator rbegin() const; //反向迭代器 只读

      reverse_iterator rbegin();       //反向迭代器 可读可写
const_reverse_iterator rbegin() const; //反向迭代器 只读

 (1)迭代器

①可读可写

    vector<int>::iterator it = v.begin();//可读可写
	while (it != v.end())
	{
        *it += 2;
        cout << *it << " ";
        it++;
	}
	cout << endl;

 

②只读

    vector<int>::const_iterator it = v.begin();//只读
	while (it != v.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

(2)反向迭代器 (这段代码屏蔽了(1)的迭代器)

①可读可写 

    vector<int>::reverse_iterator rit = v.rbegin();//可读可写
    while (rit != v.rend())
    {
        *rit += 2;
        cout << *rit << " ";
        rit++;
    }
    cout << endl;

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值