几种STL容器的基本用法[资料]

C++STL的vector中front(),back(),begin(),end()的用法 front()返回的的确是第一个元素的引用。 但是你定义的b并不是一个引用,操作b不会对a中的元素造成影响。 若定义 int &b=a.front(); 则对b的操作会影响a中第一个元素。 ... 阅读详情
 
几种STL容器的基本用法[资料]
一、原型与构造函数
Vector的原型可定义为
vector<T, allocator <T> >
其构造函数为
vector()             //空的
vector(al)          //指定一种allocator
vector(n)          //用默认T()初始化n个元素
vector(n, val)   //用Val初始化n个元素
vector(n,val,al)         //用val初始化n个元素,用al做分配器
vector(first,last)       //从己有的first到last复制生成
vector(first,last,al) //从己有的first到last复制生成,用al做分配器
 
二、操作
1.开辟N个空间
vecobj.reserve(N);
2.当前(重新分配内存前)得到最大容量
capacity();
3.重新分配内存为N
resize(N)
如果变小,则删除多余。如果变大,则用T()添充
4.清空
clear();
注意,clear()和resize()都不一定使得vector变小,若欲释放内存,请使用vecobj.swap(vector<T, A>())
5.存取首尾元素
front()与back()操作,取后一个和最前一个元素,注意其返回是引用,其而是左值(l_value),因此可以赋值. 做类似于vecobj.front() = 3;的操作,但要保证front空间有效,否则形为无法预测。
6.取值
[]与at可以做此操作,at会检查,如果越界有会out_of_range的异常被throw
7.push_back, pop_back
要保证不为空
8.使用assign
assign可以改变大小和初值,大小是随意的,不受开始时大小的限制,如果设置为0,则清空。
assign(5,0)把vector改为5个大小,并用0添充
assign(iax+3,iax+5); 从数组第4到5个填充,注意左闭右开,即可取到iax[3]与iax[4]
9.使用insert
insert(it, x),在it前插入一个元素x
insert(it,first,last),在it前插入一个序列[first,last)左闭右开
10.使用erase
erase(it)删除在it处的元素,返回值为下一元素。如果intVec.erase(intVec.end());并不会报错,如果删除一个序列[first,last),使用erase(first,last)
11.BVector是vector<bool>的特化版,具体的用途有待查证
12.flip()把某一元素,求反。如vecObj[i].flip();
13.swap. vecObj.swap(vecObj[i],vecObj[j]);
若要在容器中装一个对象并且能并检索,需要重载operator == ,如下:
#include <vector>
#include <iostream>
#include <stdlib.h>
#include <time.h>
//#include <getopt.h>
using namespace std;
 
class Obj
{
public:
         Obj(int x, int y, int z)
         {
                   this->x = x;
                   this->y = y;
                   this->z = z;
         }
         bool operator == (const Obj & obj)
         {
                   if(obj.x == x && obj.y == y && obj.z == z)
                            return true;
                   return false;
         }
         int getX()
         {
                   return this -> x;
         }
private:
         int x;
         int y;
         int z;
};
 
int main(int argc, char * argv[])
{
         vector<Obj> vecObj;
         Obj obj1(2,3,4);
         Obj obj2(4,5,6);
         vecObj.push_back(obj1);
         vecObj.push_back(obj2);
        
         vector<Obj>::iterator it =find(vecObj.begin(),vecObj.end(),Obj(2,3,4));
         if(it != vecObj.end())
                   cout << (*it).getX() << endl;
         return 0;
}
list的基本用法
与vector的用法基本相同,其中需要强调一点的是splice()函数,是指把指定段的另一个List插入到指定位置的前面。
splice(iterator it , list &x)
splice(iterator it, list &x, iterator first)
splice(iterator it,list &x, iterator first, iterator last)
 
一、原型与构造函数
typdef list<T, allocator<T> >  listObj;
构造函数
list() //空
list(al) //指定allocator的空表
list(n)//n个元素,所有元素都是T()出来的
list(n,val)//n个元素,所有元素都是T(val)出来的
list(n,val,al)//同上,并指定allocator为al
list(first, last) //复制构造
list(first,last,al) //指定allocator构造
二、操作
1.resize & clear
使用resize(n)改变大小,使用resize(n, val)如果需要用T(val) 来填满空闲值。
2.front ()& back()
如果listObj非常量对象,返回是一个左值函数
3.插入操作
insert(iterator it , val)
insert(iterator it, first, last)
insert(iteratot it, n, x)//插入n个x
4.移除
remove(x); //vector.erase(integrator it)
按值删
int iax[] ={3,4,5,6,6,7,8};
         list<int> lObj;
         lObj.insert(lObj.begin(),iax, iax + 7);
         lObj.remove(6); //
按函数条件删
 
#include <iostream>
#include <list>
using namespace std;
// a predicate implemented as a function:
bool single_digit (const int& value) { return (value<10); }
// a predicate implemented as a class:
class is_odd
{
public:
 bool operator() (const int& value) {return (value%2)==1; }
};
int main ()
{
 int myints[]= {15,36,7,17,20,39,4,1};
 list<int> mylist (myints,myints+8);   // 15 36 7 17 20 39 4 1
 mylist.remove_if (single_digit);      // 15 36 17 20 39
 mylist.remove_if (is_odd());          // 36 20
 cout << "mylist contains:";
 for (list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    cout << " " << *it;
 cout << endl;
 return 0;
}
当然,对于class is_odd,也可以写成
template <class T>
class is_odd
{
};
调用时,则要改成
mylist.remove_if(is_odd<int>());
5.unique操作
// list::unique
#include <iostream>
#include <cmath>
#include <list>
using namespace std;
 
// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }
 
// a binary predicate implemented as a class:
class is_near
{
public:
 bool operator() (double first, double second)
 { return (fabs(first-second)<5.0); }
};
 
int main ()
{
 double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,
                       12.77, 73.35, 72.25, 15.3, 72.25 };
 list<double> mylist (mydoubles,mydoubles+10);
 //UNIQUE以前必须要Sort,切记,它的内部实现是I,i+1的方式。
 mylist.sort();             // 2.72, 3.14, 12.15, 12.77, 12.77,            
                             // 15.3, 72.25, 72.25, 73.0, 73.35
 
  mylist.unique();           // 2.72, 3.14, 12.15, 12.77
                             // 15.3, 72.25, 73.0, 73.35
 
 mylist.unique (same_integral_part); // 2.72, 3.14, 12.15
                                       // 15.3, 72.25, 73.0
 
 mylist.unique (is_near());           // 2.72, 12.15, 72.25
 
 cout << "mylist contains:";
 for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    cout << " " << *it;
 cout << endl;
 
 return 0;
}
6.排序操作
sort(); //默认按operator <排序,从小到大
sort(pr); //pr为Functional函数
7.Merge操作
在merge操作前,需要对两个序列都用operator <排序,当然,也可以指定pr排序函数
merge(s2)
merge(s2,pr);
8.reverse()
翻转操作,把整个list翻转
deque的基本操作
一、原型与构造函数
typedef deque<T, allocator<T> > deqObj;
构造函数
deque();
deque(al);
deque(n);
deque(n,x);
deque(n,x,al);
deque(first,last);
deque(first,last,al);
二、操作
1.resize & clear
使用resize(n)改变大小,使用resize(n, val)如果需要用T(val) 来填满空闲值。
2.clear操作
在clear后调用deqObj.swap(deque<T,A>())是好习惯,而且也一定要这么做。
3.font(),back(),operator [],(如出边界,形为未定)at()(如出边界,抛异常),push_back(),push_front(),pop_back(),pop_front(),insert(iterator it,x),insert(iterator it,n,x),insert(iterator first,iterator last),(插入后指向刚插入的值),erase(it),删除在it指定位置的值,erase(iterator first,iterator last)删除指定区间的值(左闭右开)。这些操作与上面的操作雷同。
 
Set与multiset的基本操作
一、原型与构造函数
typedef set<Key, less<Key>, allocator<key> > setObj;
构造函数
set(); //空set,按pred()排序
set(pr); //声明一个空的按pr排序的set
set(pr,al); //声明一个按pr排序的集合用al分配
set(first,last)
set(first,last,pr)
set(first,last,pr,al)
操作
1.clear()
2.erase(it); erase(first, last)
3.insert(key),返回值为pair<iterator, bool> 类型,没有与插入元素相同的元素时,second为true,此时first指向新插入的元素。否则为False,first仍指向原来的元素
4.find(key)
5.lower_bound(key)
6.upper_bound(key)
7.equal_range(key),返回一个pair<iterator , iterator >(lower_bound(key), upper_bound(key))
8.count, equal_range的长度
9.key_comp,如果k1排在k2的前面,那么key_comp()(key1,key2)就为true
10.value_comp,对于set<key>对象,它与key_comp一样。
multiset
1.insert,由于insert总能成功,那么它返回的就是新元素的迭代器,而并非pair<iteraor, bool>对象.
2.find返回第一个与key相等的迭代器。
3.equal_range将返回 [0,setObj.size())的任意长度.
4.count()将返回[0,setObj.size())的任意值。
宇树科技嵌入式面试题及参考答案(春晚机器人的公司) 内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。 阅读详情

相关推荐

斗罗大陆叙事体系与战斗系统设计解析

在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典

weixin_29291069的博客 250

vector中front(),back()的应用

【代码】vector中front(),back()的应用。

tuse101的博客 3263

Docker+vLLM内网离线部署Qwen3 流程

本文介绍了在CentOS 7系统下进行VLLM容器化部署Qwen3-32B大模型的内网离线方案。首先需准备Nvidia显卡驱动、CUDA 12.4和Docker环境。通过联网机器拉取vllm/vllm-openai镜像并导入内网服务器,同时从魔塔社区下载模型文件。部署时使用docker run命令启动容器,配置了GPU资源、内存共享、端口映射等参数,特别指定了模型路径、并行计算、内存利用率等关键参数。该方案实现了大模型在内网环境的安全高效部署,适用于需要离线运行的AI推理场景。

qq_42881308的博客 1036

C++STL中vector容器 begin()与end()函数、front()与back()的用法

一、begin函数 函数原型: iterator begin(); const_iterator begin(); 功能: 返回一个当前vector容器中起始元素的迭代器。 二、end函数 函数原型: iterator end(); const_iterator end(); 功能: 返回一个当前vector容器中末尾元素的迭代器。 三、front函数 函数原...

weixin_30414305的博客 1805

通过EMIF接口实现FPGA与DSP的高速连接(方法)

请注意,具体的连接细节和步骤可能会根据所使用的FPGA和DSP型号以及特定的应用需求而有所不同。开发DSP和FPGA上的软件,以实现数据交换和处理。根据系统的具体需求,对FPGA和DSP的接口逻辑进行优化,以减少延迟、提高数据吞吐量或降低资源消耗。它通常支持多种类型的存储器,如SRAM、DRAM、ROM等,以及通过特定的接口与FPGA连接。对于FPGA,需要编程来实现与DSP的接口逻辑,包括地址译码、数据传输、时序控制等。在连接完成后,进行详细的调试和测试,以确保数据能够在DSP和FPGA之间正确传输。

AigcFox的博客 4587

ARTIX-7 GTP 3G-SDI 工程构建与调试实战

本文详细介绍了基于ARTIX-7 FPGA和GTP收发器的3G-SDI工程构建与调试实战。从基础概念解析到Vivado工程创建、GTP IP核配置、SDI IP核集成,再到系统集成与时钟域处理,提供了全面的技术指导。文章还分享了调试技巧、常见问题排查方法以及性能验证步骤,帮助开发者快速掌握3G-SDI视频传输技术的实现与优化。

weixin_30443813的博客 256

vector容器。back(),front(),begin(),end()。insert,以及二维

1、在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器。3、在指定位置loc前插入区间[start, end)的所有元素。2、在指定位置loc前插入num个值为val的元素。返回一个当前vector容器中起始元素的迭代器。返回一个当前vector容器中末尾元素的迭代器。五、vector中insert()的用法详解。返回当前vector容器中起始元素的引用。返回当前vector容器中末尾元素的引用。

qq_63819197的博客 2848

基于MATLAB开发AUTOSAR软件应用层模块-part2.建立一个AUTOSAR的模型,并生成autosar格式代码

上一篇我们建立了一个空模型,这篇我们接着上篇文章,建立一个简单的模型 点击 Library Browser,打开simulink模块库,见下图 左侧是模块库的列表,右侧是每个模块库里包含的具体的模块。 点击通用模块库,里边是一些常见的模块, 我们选取里边的3个模块,分别是输入,输出和增益三个模块,右键点击模块,选择add block to model xx,可以把模块添加到模型中。 然后练好连线 一个简单的模型就搭建好了,之后我们修改配置,将模型修改为AUT...

汽车软件开发 3302

关于vector、queue、list哪边是front、哪边是back,增加、删除元素操作

结构:连续内存块,支持快速随机访问。操作方向:front:第一个元素(索引 0)。back:最后一个元素(索引 size() - 1)。push_back():在尾部插入元素。pop_back():从尾部删除元素。不支持头部操作(如 push_front() 或 pop_front())。

weixin_44493244的博客 770

【2025最新版】Open3D 区域生长分割(python详细过程版)

点云区域生长分割算法的python详细过程版实现。博客长期更新,本文最新更新时间为:2025年3月23日。

点云侠的博客 9529

C# 的 Dapper 库高级进阶:刨根问底的深度解析

通过今天的探索,我们了解了 Dapper 的一些高级功能,包括如何处理复杂的查询、执行批量操作以及如何优化性能。希望这篇深入浅出的文章能帮助你在实际项目中更好地运用 Dapper!🎈好了,小伙伴们,今天的分享就到这里啦!如果你有任何疑问或者想要分享自己的经验,请在评论区留言。我们下次再见!👋上述示例代码仅供参考,实际使用时请根据项目需求进行适当调整。✨Dapper 官方文档Dapper 性能优化指南Dapper 动态参数使用来同时执行多个查询。利用Execute和Query方法来简化 SQL 调用。

java专栏 813

几种STL容器的基本用法[资料] 【转贴】

一、原型与构造函数Vector的原型可定义为vector > 其构造函数为vector()             //空的vector(al)          //指定一种allocatorvector(n)           //用默认T()初始化n个元素vector(n, val)   //用Val初始化n个元素vector(n,val,al)      

To be better everyday 591

推荐系统中召回率Recall计算方式附代码

Recall(召回率)是指在所有实际有交互的用户 - 物品对中,推荐系统成功预测出的比例。具体来说,设所有有交互的用户 - 物品对为S,推荐系统预测出的用户 - 物品对为T,则Recall的计算公式为:

优快云 精品推荐 1842

常用STL容器的基本用法

系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关。

2301_80455281的博客 1439

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++ STL容器(container) 入门总结

STL为用户提供了多种名为容器(Container)的类,用于管理数据集合。 在创建动态数组、表、栈、队列、地图等数据结构时,我们只需定义对应的容器,包含其头文件,然后调用相应成员函数或算法即可。   C++ STL 最为基本的容器(Container)如下所示: stack:栈 queue:队列 vector:向量 list:双向链表 set...

Patience 8105

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++ STL unordered_map容器用法详解

C++ STL 标准库中提供有 4 种无序关联式容器,本节先讲解 unordered_map 容器。unordered_map 容器,直译过来就是"无序 map 容器"的意思。所谓“无序”,指的是 unordered_map 容器不会像 map 容器那样对存储的数据进行排序。换句话说,unordered_map 容器和 map 容器仅有一点不同,即 map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。

weixin_51710308的博客 3449

C++——STL容器

STL容器的介绍 vector, queue, deque, priority_queue, list, map 等等

JAN6055的博客 6030

C++ STL常用容器

C++的STL中,有哪几种容器? 容器 在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。 序列容器(7个) vector vector是一段连续的内存地址,基于数组实现,其提供了自动内存管理功能(采用了STL普遍的内存管理器allocator),可以动态改变对象长度,提供随机访问。在尾部添加和删除元素的时间是常数的,但在头部或中间就是线性时间。 在ve...

a834595603的博客 8734

STL vector的内部实现原理及基本用法

本文基于STL vector源代码,但是不考虑分配器allocator,迭代器iterator,异常处理try/catch等内容,同时对_Ucopy()、 _Umove()、 _Ufill()函数也不会过度分析。一、vector的定义template<class _Ty, class _Ax> class vector : public _Vector_val<_Ty

qinm的专栏 4万+

C++ STL 库教学资料

STL中的4大块面:QUEUE,STACK,TAIR,MAP

YJ2013_7817的博客 911

竞赛常用STL容器详解

在算法竞赛中,使用C++语言的占很大比例,而几乎没有人使用C语言,其中核心的原因就是C++包含STL容器库,能够极大地减少选手在赛场上为了一些基础数据结构而浪费的时间。如果可以的话,我们总是希望不要手写红黑树、动态数组的。那么STL容器库的出现就像雪中送炭一样了。它们覆盖了竞赛中最基础的需要(张昆玮树、主席树这种东西肯定不会包含的),让你在面对非数据结构题的时候能够不因数据结构部分的代码而分心。 关于STL容器的相关问题非常细,经常成为面试中的考题,这里我们仅讨论一些必须的内容,然后只谈论在竞赛中的具体使用

zclll的博客 1475

C++STL容器

STL(Standard Template Library)是C++中的标准模板库,提供了很多常用的数据结构和算法。其中,STL容器就是其中的一个重要组成部分,用于存储和组织数据。STL容器包括以下几种主要类型:序列容器(Sequence Containers)、关联容器(Associative Containers)、无序关联容器(Unordered Associative Containers)、容器适配器(Container Adapters)。

xxxiaobai707的博客 1477
上一篇: #define和typedef的区别
下一篇: 人工神经网络简介
JamesXing
博客等级 码龄20年 30粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值