千家信息网

STL中vector怎么用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下STL中vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.vector是什么1.vec
千家信息网最后更新 2026年11月02日STL中vector怎么用

小编给大家分享一下STL中vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.vector是什么

1.vector是一个表示可变大小数组的容器。

2.vector采用连续存储空间来进行元素的存储。

3.vector使用动态分配数组来存储它的元素。

2.vector创建对象

以下为vector的四种拷贝构造函数。

    vector v1;//创建空对象v1        vector v2(10, 8);//创建有十个8的对象v2        vector v3(++v2.begin(), --v2.end());//通过迭代器进行拷贝构造,迭代器可以加减操作        vector v4(v3);//拷贝构造        string s("hello world");        vector v5(s.begin(), s.end());

vector创建对象的过程也就是它调用其构造函数和拷贝构造的过程,我们也可以将s中字符串存入容器v5中。
注意vector不能取代string,这是因为使用vector需要手动打印’\0’,并且vector也不支持+=和比较大小等一系列的操作。

3.遍历vector

为了更好地演示,我们先定义一个数组,并向其中传入数据。

vector v;        v.push_back(1);        v.push_back(2);        v.push_back(3);        v.push_back(4);        v.push_back(5);

(1)下标遍历

下标遍历可读可写。

   for (int i = 0; i < v.size(); i++)        {                v[i] += 1;//可以修改,因为返回的值是引用                cout << v[i] << endl;        }

(2)迭代器遍历

vector<int>::iterator it = v.begin();while (it != v.end()){*it -= 1;cout << *it << " " ;++it;}

(3)范围for遍历

     for (auto& e: v)        {                cout << e << " ";        }

原生指针就是天然的迭代器,数组支持范围for会被替换成指针。

3.vector容量函数

表示vector容量的函数一共有三个。

     cout << v2.size() << endl;        cout << v2.capacity() << endl;        cout << v2.max_size() << endl;

v2.size()表示的是目前元素个数。

v2.capacity()表示的是最大容量。

v2.max_xize()表示的是系统可以分配的给vector的最大容量(还未分配)。

如果内存是一个图书馆的话,vector表示的是一个书架,size()就表示书架上放了多少书,capacity()表示的就是书架的最大容量,max_size表示的是图书馆中最大能放一个容量为多大的书架。

4.vector的扩容函数

我们使用vector的时候通常也是在堆上开辟空间的。这就需要用到两个函数,reseve和resize,其使用方法和string的一样,reserve只开空间不初始化,resize开空间而且还初始化,不传初始化内容默认为0。

   vector v2(10,45);//创建有十个8的对象v2        cout << v2.size() << endl;        cout << v2.capacity() << endl;        v2.reserve(20);        cout << v2.size() << endl;        cout << v2.capacity() << endl;

resize需要借助调试来观察初始化的内容:

通过调试我们可以看到新开辟的空间里都初始化成了0。

我们还可以通过assign函数来将之前的内容进行覆盖。

     vector v1;//创建空对象v1        vector v2(10,45);//创建有十个8的对象v2        v2.assign(20, 5);

5.vector的插入删除

(1)尾插与尾删

插入删除主要使用四个函数:

尾插:push_back

尾删:pop_back

定点插入:insert

定点删除:erase

删除所有数据:clear

     vector v1;//创建空对象v1        v1.push_back(1);        v1.push_back(2);        v1.push_back(3);        v1.push_back(4);        for (auto& e: v1)        {                cout << e << " ";        }

pop_back这里就不演示了,就是一个简单的尾删。

(2)insert与erase

insert与erase是最容易引起迭代器失效的两个函数,关于迭代器失效的原理我会在下一节vector的模拟实现中详细解释。现在只需要记住string与vector迭代器失效的两种情况即可:

1.如果空间被重新分配,则指向容器的迭代器、指针和引用都会失效。

2.如果空间没被重新分配,指向插入位置之前的元素的迭代器、指针和引用依然有效,但指向插入位置之后元素的带带器、指针和引用将会失效。

注意,这里的迭代器指的是我们自己定义的迭代器。

     vector::iterator ret = v1.begin();        v1.insert(ret, 0);//在ret处插入0

我们可以通过insert来进行插入元素。

但当我们进行删除的时候,如果这样写程序会报错的。

       vector::iterator ret = v1.begin();        v1.insert(ret, 0);        v1.erase(ret);

这是因为我们对v1进行了插入数据,空间被重新分配了,原有的ret失效了。如果要删除首元素,需要使用v1.begin()来删除。

为了保险起见,使用插入或者删除的操作之后,一定要记得更新迭代器。

(3)clear

clear会删除所有数据,注意一点,删除数据不会删除容量。

vector的特殊应用

vector>

表示一个二维数组,vector本身就是一个模板类型,里面也可以存放一个vector的类型。

相当于vector本身是一个数组,它的每个数据又是一个int类型的数组。

vector

表示数组中每一个元素都是一个字符串。

以上是"STL中vector怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

迭代 函数 元素 对象 数组 空间 容量 数据 分配 内容 指针 最大 书架 就是 拷贝 容器 指向 篇文章 类型 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 互联网科技未来 远信互联网科技 凡科互联网科技 南京欣网互联网科技 深圳市运趣互联网科技有限公司 互联网科技公司需要的职位 青岛中康互联网医疗科技有限公司 科技互联网大厂 健康食品互联网创新科技园项目 深圳市罗太互联网科技有限公司 南博望互联网科技有限公司 华中科技大学互联网的牛人 滨湖区互联网智能科技产品有哪些 富国互联网科技002692 国产互联网科技公司 互联网科技机房 中国互联网公司的科技投入 如何强化互联网金融科技 武汉亿视互联网科技有限公司 广州紫鲸互联网科技有限公司 互联网科技保险 苏州互联网科技贷款公司 阿大互联网科技有限公司 亳州好赞互联网科技有限公司 企晟互联网信息科技有限公司 卓翼科技产业互联网合作 互联网的科技体现在哪里 上海旺乐尼互联网科技有限公司 小牛互联网科技有限公司地址
0