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

STL学习笔记之容器

首先我们要学习的是容器

第一个是容器的初始化(构造方式)有三种方式

分别是

第一种

int arr[]={1,2,3}

vector<int> v1(arr,arr+3)

即容器存放的种类和从另外一个数组去拷贝一段数据。

第二种

vector<int> v2(3,10);

第一个3是指存放的进入容器的个数

第二个10是存进容器的值。

第三种

vector<int> v3(v1);

直接将其他容器拷贝过来。

然后我们要了解容器的赋值方法

第一种

vector.assign(beg,end)左闭右开

例如

int arr[]={1,2,3}

vector.assign(arr,arr+3);

那么容器就会装载1,2.

之所以要左闭右开。是因为一个容器的结尾并不是这个容器的最后一个元素,而是元素的后一位。

所以vector.begin()是指的容器的第一位。vector.end()是容器的n+1位(n指元素个数)

那么这样vector.assign(v1.begin(),v2.end())就会拷贝中v2这个容器中的所有元素。

vector.assign(n,elem)

例如vector.assign(3,10);

同构造容器,不再赘述。

第三种vector.swap()

例如v2.swap(v1);就会将v1,v2的内容进行交换。

然后我们要讲的就是容器的大小

首先是

vector,size()那么返回值就是这个中元素的个数。(int类型)

第二个

vector.empty()。这个将会返回bool值,如果容器为空将会返回ture,否则会返回false

第三个

vector.resize(num);重新指定容器的大小,如果容器变长则会用默认值进行填充,如果变短则会自动删除超出容器大小的值。

第四个

vector.resize(num,elem)。这个地方就是把默认值替换为elem。规则相同。

容器的访问

vector[]进行访问就可以了,类比数组。

或者vec.at()。一样的是传入位置即可。

但是如果使用vec.at()出现越界会抛出out_of_range异常。

而vec[]会直接报错。但是区别不大。

接下来是容器的插入

vector.insert(pos,elem);

这个会在pos位置插入elem元素的拷贝,并且返回新数据的位置。

vector.insert(pos,n,elem);

在pos位置插入n个elem数据,无返回值

vector.insert(pos,beg,end);

注意Pos是对应位置的指针即vector.insert(v1.begin()+3,elem);

在pos位置插入beg到end区间的数据(前闭后开),无返回值。

然后就是对容器的末尾进行增删的操作。

vector.push_back(num)和vector.pop_back();即可

接下来我们来学习迭代器

首先迭代器的作用,可以减少容器的越界访问。

再就是迭代器的构造

vector<int>::iterator it;

it=v1.begin();

cout << *it;通过*就可以实现对迭代器指向的元素进行访问和操作。

然后我们来学习迭代器的失效

vector.insert(it,8)由于容器的存储可能会整体搬迁,那么就可能导致迭代器的失效

在这里由于insert()可以返回插入的值的新的位置。

所有it=vector.insert(it,8);可以避免这个问题。

另外一种就是删除元素也有可能导致的迭代器失效。

vector<int>::iteretor it2;

it2=v1.erase(it);

这个时候由于已经erase(it),系统会默认迭代器已经失效了。从而再次使用的时候会报错。

同理如果用it=v1.erase(it);就会重新使得迭代器有效,就可以避免这种问题的出现。

http://www.lryc.cn/news/180444.html

相关文章:

  • Java基础---第十二篇
  • Acwing 841. 字符串哈希
  • NEON优化:性能优化经验总结
  • C++ 并发编程实战 第九章
  • 【Java】super 关键字用法
  • 前端笔试题总结,带答案和解析
  • Omniverse Machinima
  • 【测试人生】游戏业务测试落地精准测试专项的一些思路
  • Redis 数据类型底层原理
  • EasyEdge 智能边缘控制台通过sdk发布应用
  • centos软件设置开机启动的方式
  • 二叉树和堆
  • 洛谷P5732 【深基5.习7】杨辉三角题解
  • Docker 精简安装 Nacos 2.2.1 单机版本
  • IntelliJ IDEA配置Cplex12.6.3详细步骤
  • 2023 年最佳多 GPU 深度学习系统指南
  • Kotlin异常处理runCatching,getOrNull,onFailure,onSuccess(1)
  • 【深入探究人工智能】:历史、应用、技术与未来
  • 【设计模式】五、原型模式
  • day36-注解
  • 【C语言数据结构——————栈和队列4000字详解】
  • 电子地图 | VINS-FUSION | 小觅相机D系列
  • C++goto语句
  • Spring学习笔记11 GoF代理模式
  • 代码随想录二刷 Day23
  • Ubuntu `apt` 报错 “Errors were encountered while processing: base-passwd“ 的解决方法
  • XXL-JOB分布式任务调度
  • 加拿大人工智能数据搜索平台【Secoda】完成1400万美元A轮融资
  • less与sass
  • c-const修饰指针-day16