千家信息网

STL中vector怎么用

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,小编给大家分享一下STL中vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.vector是什么1.vec
千家信息网最后更新 2025年01月18日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的时候通常也是在堆上开辟空间的。这就需要用到两个函数,reseveresize,其使用方法和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安全错误 数据库的锁怎样保障安全 我的世界服务器对电脑的要求 w10输入网络安全密钥没反应 梦想启航互联网科技有限公司 高二会考计算机网络技术试题 共建网络安全成共识 各大院校软件开发公司排行 即时通讯软件开发好干吗 电脑服务器上找不到打印机 南宁能做vr的软件开发公司 软件开发三方合同模板 关于网络安全的调查的目的 解决网络安全问题的研究思路 数据库会话最大存活时间上限 网络安全工作难点 软件开发 op 语音数据库提供什么缓存类型 如何把电脑当服务器开伺服 浙江服务器机柜价格表 p2p网络技术在农业的应用 网络安全管理规定个人 南川区工商软件开发流程要求 网络安全意识责任制度文库 上市公司网络安全股票 互联网科技发展的最新成果 怎样提高网络安全意 https 服务器 审查网络安全是哪个机关 监控服务器管理 cmd连接其他sql数据库 为什么网络安全模式进不去
0