C++标准模板库(STL)常见容器与算法介绍(1)

  • 通过迭代器(iterator)

vector::iterator it;

it就相当于是vector<typename>::iterator类型的变量。

可以用过*it的方式来访问元素

begin()end()

begin()获取vector元素的首地址,

end()获取末尾元素的下一个地址(遵循左闭右开的原则)

for(int i=0;i<5;i++){

vec.push_back(i);

}

vector::iterator it = vec.begin();

for(int i=0;i<5;i++){

printf(“%d\n”,*(it+i));

}

由此可见,vec[i]*(vec.begin()+i)的等价的。

注意:在STL容器里只有vectorstring支持v.begin()+整数的写法,因为其他容器的存储结构并不是线性的。

  • 迭代器与++!=运算符

注意不能写成it<vec.end()只能写成不等于。

for(vector::iterator it=vec.begin();it!=vec.end();it++){

printf(“%d\n”,*it);

}

常用函数


  • (1)push_back()

作用:在vector尾部添加一个元素,时间复杂度O(1);

  • (2)pop_back()

作用:删除vector尾部的一个元素,时间复杂度O(1);

  • (3)size(),获取vector中元素的个数,时间复杂度O(1),不过注意返回的是unsigne int类型。

  • (4)clear(),清空所有元素,时间复杂度O(N)

  • (5)insert(it,x),向vector任意迭代器的位置,插入一个元素,时间复杂度O(N)。注意第一个参数是迭代器,而不是整数。

说明,被插入的地方的元素以及它后面的所有元素(如果有)顺次向后移动一位

insert(vec.begin(),x) //在首部插入元素x;

insert(vec.end(),x) //在尾部添加元素x,相当于 push_back(x);

  • (6)erase()

  • (i) erase(it)

删除迭代器it处的元素。

for(int i=0;i<5;i++){

vec.push_back(i+1);

}

vec.erase(vec.begin()+3); //,下标为3,删除的是第4个元素

for(int i=0;i<vec.size();i++){

cout<<vec[i]<<endl;

}

1

2

3

5

  • (ii)erase(begin,last)的所有元素。

删除迭代器**[begin,last)**处的元素。注意左闭右开。

erase(vec.begin(),vec.end()) //删除*(vec.begin)……*(vec.end()-1);

// 也就是删除所有的元素。

string

========================================================================

头文件

#include //string.h是C语言中的。

定义


string str = “abcd”;

str = “defg”;

string的元素访问


  • (i)通过下标

通过下标访问就像是字符数组一样。

string s = “abc”

cout<<s[0]<<endl; // ‘a’

char c = s[0];

输入输出用cin 、cout

如果想用printf()呢,可以用c_str()将string转换为字符数组。

string s = “abc”;

printf(“%s\n”,s.c_str());

  • 通过迭代器

当然真正要用,是没有必要这样做的。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
725632494)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值