您的位置:首页 > 科技 > 能源 > ai域名注册_宁波cms建站_seo网站管理招聘_免费大数据网站

ai域名注册_宁波cms建站_seo网站管理招聘_免费大数据网站

2024/11/16 10:27:39 来源:https://blog.csdn.net/2302_81257639/article/details/143196744  浏览:    关键词:ai域名注册_宁波cms建站_seo网站管理招聘_免费大数据网站
ai域名注册_宁波cms建站_seo网站管理招聘_免费大数据网站

C++初阶学习第七弹——string的模拟实现-CSDN博客

C++初阶学习第六弹------标准库中的string类_c# string[]-CSDN博客

目录

一.vector的基本概念

二、vector的使用

2.1.vector iterator 的使用

2.2vector的空间增长问题

2.3 vector的增删查改


一.vector的基本概念

vector是表示可变大小数组的序列容器 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。

 一般有以下几种特点:可动态增长,可动态缩小,支持随机访问,支持插入和删除。

 vector是一个模板类,定义在头文件(include<vector>)中。可以使用vector来存储任意类型的对象,包括自定义类型。

二、vector的使用

vector由于是一个容器,它支持不同类型的数据进行操作,所以这个写法上与string还是有不少区别,如vector在定义一个变量时的方式为:

vector<int> v1;
vector<double> v2;
vector<string> v3;

#include<iostream>
#include<vector>
using namespace std;// 1、测试vector的几种构造方法
void test1_vector()
{vector<int>();    //这种的会发生隐式类型转换,但只在本行起作用vector<int> v1;   //无参构造vector<int> v2(10, 100);   //构造一个vector有10个100vector<int> v3(v2);    //拷贝构造vector<int> v4(v2.begin(), v2.end());   //迭代器构造//下面还有一种迭代器构造的方式,这里涉及了迭代器的初始化,我们在下面会讲int arr[] = { 22,33,44,55 };vector<int> v5(arr, arr + sizeof(arr) / sizeof(int));cout << "The contents of v5 are:";for (vector<int>::iterator it = v5.begin(); it != v5.end(); ++it)cout << ' ' << *it;cout << '\n';
}
int main()
{test1_vector();return 0;
}

 

2.1.vector iterator 的使用

void test2_vector()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//正向迭代器1vector<int>::iterator it = v1.begin();while (it != v1.end()){cout << *it << " ";++it;}cout << endl;//正向迭代器2for (auto e : v1)     //for循环的本质其实就是迭代器,而且它还会自己++{cout << e << " ";}cout << endl;//反向迭代器vector<int>::reverse_iterator rt = v1.rbegin();while (rt != v1.rend()){cout << *rt << " ";rt++;}cout << endl;
}

2.2vector的空间增长问题

capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。

这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义 的。vs是PJ版本STL,g++是SGI版本STL。

reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问 题。 resize在开空间的同时还会进行初始化,影响size。 

esize有两个参数,一个是开辟空间大小,一个是初始化大小

reverse只有一个参数,就是开辟空间大小

void test3_vector()
{vector<int> v1;v1.reserve(100);         //开辟一个100大小的空间cout << v1.capacity() << endl;vector<int> v2;v2.resize(10);          //开辟一个10个大小的空间,同时改变size,并通过半缺省来初始化for (auto e : v2){cout << e << " ";}cout << endl;vector<int> v3;v3.resize(10, 3);  //将数据初始化为3for (auto e : v3){cout << e << " ";}cout << endl;
}

2.3 vector的增删查改

void test4_vector()
{vector<int> v1;//增——push_back(尾插)v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);cout << "增:";for (auto e : v1){cout << e << " ";}cout << endl;//删——pop_back(尾删)v1.pop_back();cout << "删:";for (auto e : v1){cout << e << " ";}cout << endl;//查——find(这个是算法库中的接口,不是vector的接口,返回类型是查找位置的迭代器)auto pos1 = find(v1.begin(), v1.end(), 2);cout << "查:";cout << *pos1 << endl;    //如果没找到就不进行任何操作//在任意位置插入——insert//要先用find找到要插入的位置,然后再插入数据auto pos2 = find(v1.begin(), v1.end(), 2);if (pos2 != v1.end()){v1.insert(pos2, 20);}cout << "插入任意位置:";for (auto e : v1){cout << e << " ";}cout << endl;//在任意位置删除——erase//同样要先用find找到要删除的位置,然后再删除数据auto pos3 = find(v1.begin(), v1.end(), 2);v1.erase(pos3);cout << "删除任意位置:";for (auto e : v1){cout << e << " ";}cout << endl;//改——operator[]v1[0] = 100;cout << "改:";for (auto e : v1){cout << e << " ";}cout << endl;
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com