当前位置: 首页 > news >正文

外贸建站模板价格江西航达建设集团网站

外贸建站模板价格,江西航达建设集团网站,鞍山+网站建设,萧山区seo关键词排名目录 1.vector是什么? 2.vector的使用 2.1vector的构造函数 2.2vector iterator 的使用 2.3vector 空间增长问题 2.4vector的增删查改 1.vector是什么? 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector也 采用连续的存储…

目录

1.vector是什么?

2.vector的使用

2.1vector的构造函数

2.2vector iterator 的使用

 2.3vector 空间增长问题

2.4vector的增删查改


1.vector是什么?

1. vector是表示可变大小数组的序列容器。
2. 就像数组一样,vector也 采用连续的存储空间来存储元素 。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组, 它的大小是可以动态改变的,而且它的大小会被容器自动处理
3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
4. vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
5. 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
6. 与其它动态序列容器相比(deque, list and forward_list),vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。
7.vector是 C++ 标准模板库(STL)里的一个类模板,借助模板参数能够生成不同类型的类。

oid test_vector1()
{vector<string> v;string name1("张三");v.push_back(name1);v.push_back(string("张三"));//匿名对象v.push_back("张三");//在 C++ 中,单参数的构造函数默认支持隐式类型转换。vector<vector<int>> vv;//相当于二维数组
}

2.vector的使用

vector学习时一定要学会查看文档:这是vector文档的链接  https://cplusplus.com/reference/vector/vector/https://cplusplus.com/reference/vector/vector/

下面是对vector重要接口的介绍。

2.1vector的构造函数

构造函数声明
接口说明
vector()
无参构造
vector size_type n, const value_type& val = value_type()
构造并初始化 n val
vector (const vector& x)
拷贝构造
vector (InputIterator first, InputIterator last)
使用迭代器区间初始化
int TestVector2()
{vector<int> first;                                // 空参构造vector<int> second(4, 100);                       // 初始化4个100vector<int> third(second.begin(), second.end());  // 迭代器区间初始化vector<int> fourth(third);                       // 拷贝构造// 利用迭代器区间初始化不仅仅可以用vector的迭代区间也可以用其他容器的迭代器区间int myints[] = { 16,2,77,29 };vector<int> fifth(myints, myints + sizeof(myints) / sizeof(int));string str("hello world");vector<char> sixth(str.begin(), str.end());return 0;
}

2.2vector iterator 的使用

iterator 的使用
接口说明
begin+end
获取第一个数据位置的迭代器 , 获取最后一个数据的下一个位置
的迭代器
rbegin + rend
获取最后一个数据位置的迭代器 ,获取第一个数据前一个位置的迭代器

有了迭代器就可以和C++库里面实现的一些算法结合在一起进行使用了 。

 

例如C++库里实现的sort和find算法,所传参数都是迭代器的区间。

#include<algorithm>
#include<vector>
using namespace std;
int main()
{int a[] = { 16,2,77,29 };vector<int> v5(a, a+4);//默认降序  >sort(v5.begin(),v5.end());//升序  <sort(v5.begin(), v5.end(), greater<int>());//greater<int>匿名对象比较器 int a1[] = { 16,2,77,29,3,33,43,2 };vector<int> v1(a1, a1 + sizeof(a)/sizeof(int));//删除其中的3vector<int>::iterator pos=find(v1.begin(),v1.end(),3);if(pos != v1.end()){v1.erase(pos);}return 0;
}

 2.3vector 空间增长问题

容量空间
接口说明
size
获取数据个数
capacity
获取容量大小
empty
判断是否为空
resize
改变 vector size
reserve
改变 vector capacity
void TestVector3()
{v1.reserve(10);for (size_t i = 0; i < 10; i++){v1[i] = i;}//上述的代码是典型的错误,以为预留好了空间就可以直接访问,这是错误的。//reserve预留空间的目的是为了减少扩容,并不会修改size,上面相等于越界访问。//正确应该是这样写v1.reserve(10);for (size_t i = 0; i < 10; i++){v1.push_back(i);}//或者v1.resize(10);for (size_t i = 0; i < 10; i++){v1[i] = i;}}

2.4vector的增删查改

vector 增删查改
接口说明
push_back
尾插。
pop_back
尾删。
find
查找。(注意这个是算法模块实现,不是 vector 的成员接口)
insert
position 之前插入 val。
erase
删除 position 位置的数据。
swap
交换两个 vector 的数据空间。(vector的成员函数中有swap)
operator[] 
像数组一样访问
void test_vector5()
{int a[] = { 16,2,77,29,3,33,43,3,2,3,3,2 };vector<int> v1(a, a + sizeof(a)/sizeof(int));for (auto e : v1){cout << e << " ";}cout << endl;// 头删v1.erase(v1.begin());for (auto e : v1){cout << e << " ";}cout << endl;// 头插 v1.insert(v1.begin(), 100);for (auto e : v1){cout << e << " ";}cout << endl;// 删除第3个数据v1.erase(v1.begin()+2);for (auto e : v1){cout << e << " ";}cout << endl;// 删除3,但是不知道3在哪个位置,怎么办?//vector<int>::iterator pos = find(v1.begin(), v1.end(), 3);auto pos = find(v1.begin(), v1.end(), 3);/*if (pos != v1.end()){v1.erase(pos);}*/// 删除所有的3 -- 涉及迭代器失效!while(pos != v1.end()){v1.erase(pos);//pos = find(pos+1, v1.end(), 3); 这是错的,迭代器会失效pos = find(v1.begin(), v1.end(), 3);}for (auto e : v1){cout << e << " ";}cout << endl;//assign(size_type count, const T& value)//将 vector 中的元素替换为 count 个值为 value 的元素。v1.assign(10, 1);for (auto e : v1){cout << e << " ";}cout << endl;
}

http://www.dtcms.com/a/587936.html

相关文章:

  • 在网站上做网络课堂软件多少钱wordpress添加继续阅读
  • 阿里云做的网站误删了富德生命人寿保险公司官方网站
  • 网站建设实验结论酒店网站建设案例策划书怎么写
  • 去掉wordpress版权网站东莞优化建设
  • 企业建设营销型网站步骤网站链接失效怎么做
  • 单页网站建设wordpress 快讯
  • wordpress网站数据库备份网站建设及推广预算表
  • ps网站设计怎么做昆明小程序开发联系方式
  • 老年大学网站开发河北建设网站公司
  • 网站前台数据库网页版微信怎么登陆
  • 高校保卫处网站建设工作广州黄埔区开发区建设局网站
  • 企业网站实名认证怎么做wordpress静态nginx规则
  • 企业网站的优化和推广方法做的网站怎么放视频
  • 漳州城乡建设局网站胶州哪家公司做网站
  • 韩国儿童才艺网站建设模板免费建设网站制作
  • 咸阳网站开发联系方式室内设计培训班哪里好
  • 珠海手机网站漯河seo推广
  • 天津公司建站怎么做万网网站
  • 网站后台目录如何保护四川省建设注册资格中心网站
  • asp.net做网站教程wordpress 仪表盘 慢
  • 门户网站模板图片做网站备案须知
  • 网站开发是什么意思自建站平台
  • 免费注册域名的网站百度标注平台怎么加入
  • 网站上传文件代码如何做登录网站
  • 在家可以加工的小工厂企业网站排名提升软件智能优化
  • 有关网站设计的文章h5制作开发新报价图片
  • 招商网站建设推广外贸网站google推广
  • 如何做网站自适应源码论坛网搭建
  • 企业网站开发需求分析网络广告策划与创意
  • 宣城市建设银行网站首页中国万网域名注册