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

C++容器类型内置函数随笔

vector 容器

添加数据 vector <int> v ;  v.push_back(数据);

访问数据的两个迭代器b.begin()和v.end() 

vector <int> :: iterator it_begin = v. begin(); //容器起始位置元素的指针

vector <int> :: iterator it_end =v.end(); //指向容器最后一个元素下一个位置的指针

while (it_begin != it_end){

        cout<< *it_begin<<endl;

        it_begin++;

}

另外一种遍历方式:

for (vector <int> :: iterator it = v.begin() ; it != v.end() ; it++)

{

        cout <<*it <<endl;

}

打印vector 元素的函数:

void printvec (vector <int> &v ){

        for (vector <int> :: iterator it = v.begin() ; it != v.end() ; it++)

         {

                cout <<*it <<endl;

        }

}

vector 相似于数组,但是数组是静态空间,vector是动态扩展

动态扩展:
并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

 vector称之为单端数组,如下图:

无参构造:

vector <int > v ;

有参构造:

vector <int > v2 (v1.begin(),v1.end()); //直接赋值迭代器中间的数据

n个elem方式:

vector <int> v3 (10,100); //10个100

拷贝构造:

vector <int > v4(v);

vector 容量和大小:

判断是否为空 v1.empty()

输出容量v1.capacity()   一般是有空余,比如创建vector空间是13,但是只插入了10个数

输出大小 v1.size() // 按照上述,容量是13,大小是10

重新指定大小v1.resize (20 , x) ; //若过长,则默认使用x值填充 ,若不指定x值,默认为0

若比原来的短,超出的部分删去

插入删除:push_back / pop_back

push_back在尾部添加

pop_back在尾部删除

insert指定位置插入 v1.insert(v1.begin() ,100) //在头部插入100

insert指定位置插入 v1.insert(v1.begin() ,2,1000) //在头部插入2个1000

v1.erase(v1.begin()) ;删除一个头部元素

v1.erase(v1.begin(),v1.end()) ;从头到尾全部删除  等于v1.clear();

at访问元素:

 v1.at(i) 等同于 v1[i] 

获取整个数组的第一个元素: v1.front() ; 最后一个元素: v1.back()

元素互换 swap():

vector<int > v1;

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

        v1.push_back (i );

}

vector<int > v2;

for (int i  = 10 ; i>0; i--){

        v2.push_back (i );

}

v1.swap(v2);  //实现v1与v2内容互换

用于收缩内存空间:

上述代码输出:

防止空间冗余

string容器

string 的构造函数(下列分别对应默认构造、有参构造、拷贝构造):

注意:有参构造需要传入指向const的指针变量

字符串拼接:

直接str += "需要拼接的字符";

或者str.append(” 需要拼接的字符“)

或者需要限制拼接的字符的长度:

str3.append( "LOL_APEX",3);  //第二个参数是长度,即拼接了LOL

str3.append("LOL_APEX!",4,5); //从第4个参数开始截取,取5个长度即:APEX!

查找 :find

int pos = str1.find("abc");//返回第一次出现字符的位置,若没找到返回-1

int pos1= str1.rfind ("abc"); //该函数从右往左查找, 但是下标位置还是从左往右计算

替换:replace

string str1 = "abcdefg";
str1.replace(1,3,"1111");

 返回结果a1111efg ,会把指定的字符全替换进去,而不是依据1到3的长度

字符串比较:compare

字符串比较是按字符的ASCII码进行对比

str1.compare(str2) 
=返回 0
>返回 1 //第一个字符大于第二个字符
<返回 -1

string字符串存取:

访问单个字符:at

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

        cout <<str.at(i)<<" ";   //等同于 cout <<str[i]<<" ";

}

修改单个字符也可以用at()


删除:delete  插入:insert 

string str = "hello";

str1.insert (1,"111") ; //在位置为1处插入

最后输出h111ello 

str.erase (1,3);  //从位置1删到位置3

输出hello

截取子串substr:

string str1 = "abcdef";

string subs1  = str1.substr (1,3);

输出sub1 为bcd

实用场景比如截取邮件的@前用户名

拷贝: copy

Deque 容器

 相比于vector ,deque是双端数据,可以对头端进行插入删除操作

vector对头部的插入删除效率低,操作头部速度慢,但是访问元素的速度要比deque快

// 构造函数
deque <int > d1;

for (int i = 0; i<10 ; i++ )

{

        d1.push_back(i) ;

}

deque <int > d2 (d1.begin() , d1.end()); 

deque <int> d3 (10,100) ; //10个100

deque<int > d4 (d1);


//赋值函数
deque <int > d5;
d5= d1;
deque <int > d6;
d6.assign(d1.begin() , d1.end());

判断是否为空 deque.empty()

判断元素个数 deque.size()

注意:Deque中没有查询容量的函数,没有容量的概念

重新指定大小 d1. resize (15,100) ; 超出部分使用100代替,不指定为0

首端与尾端插入和删除:

d1.push_back(10); //尾插

d1.push_back(20);

d1.push_front(100); //头插

d1.push_front(200);

/// 此时输出200 100  10 20 

d1.pop_back() ; 尾删

d1.pop _front() ; 头删

d1. insert("插入位置" ,“插入内容”);

d1. insert("插入位置" ,插入数量,“插入内容”);

删除 : d1. erase("位置")

如删除1位置的元素

deque <int > ::iterate it  = d1.begin();

i++;

d1.erase(it);

全部清空:

d1.clear();

元素访问:

使用[ ] 和at ,使用front返回第一个元素,使用back返回最后一个元素


http://www.kler.cn/news/331832.html

相关文章:

  • 62. 环境贴图2
  • 【openwrt-21.02】T750 openwrt switch划分VLAN之后网口插拔状态异常问题分析及解决方案
  • 【分布式微服务云原生】如何在ActiveMQ中优雅处理提前支付的延时订单
  • netty之Netty请求响应同步通信
  • mybatis-plus使用总结
  • YOLO11改进|注意力机制篇|引入注意力与卷积混合的ACmix
  • C语言 | Leetcode C语言题解之第455题分发饼干
  • 云原生数据库 PolarDB
  • 【AIGC】ChatGPT开发者必备:如何获取 OpenAI 的 API Key
  • 异常场景分析
  • 读数据湖仓06数据集成
  • 深度学习----------------------------编码器、解码器架构
  • 如何让服务器自动封禁低质量ip
  • 程序猿成长之路之设计模式篇——设计模式简介
  • C++——定义个一个结构体变量(包括年、月、日),编写程序,要求输入年、月、日,程序计算并输出该日在本年中是第几天。(提示:需要考虑闰年)
  • 酒店新科技,飞睿智能毫米波雷达人体存在感应器,智能照明创新节能新风尚
  • 掌握 C# 中的委托与事件机制
  • 微信小程序攻略:如何验证Token是否即将失效并自动刷新
  • 70.【C语言】动态内存管理(重点)(3)
  • 【Echarts】折线图和柱状图如何从后端动态获取数据?