C++ STL:list用法详解

C++ STL list的初始化、添加、遍历、插入、删除、查找、排序、释放 list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。 使用list容器之前必须加上STL的list容器的头文件:#include; list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用全局的命名空间方式:using nam 阅读详情

list容器介绍

相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。

常用函数

(1)    构造函数

list<Elem> c:创建一个空的list

list<Elem> c1(c2):复制另一个同类型元素的list

list<Elem>c(n):创建n个元素的list,每个元素值由默认构造函数确定

list<Elem>c(n,elem):创建n个元素的list,每个元素的值为elem

list<Elem>c(begin,end):由迭代器创建list,迭代区间为[begin,end)

(2)    大小、判断函数

Int size() const:返回容器元素个数

bool empty() const:判断容器是否为空,若为空则返回true

(3)    增加、删除函数

void push_back(const T& x):list元素尾部增加一个元素x

void push_front(const T& x):list元素首元素钱添加一个元素X

void pop_back():删除容器尾元素,当且仅当容器不为空

void pop_front():删除容器首元素,当且仅当容器不为空

void remove(const T& x):删除容器中所有元素值等于x的元素

void clear():删除容器中的所有元素

iterator insert(iterator it, const T& x ):在迭代器指针it前插入元素x,返回x迭代器指针

void insert(iterator it,size_type n,const T& x):迭代器指针it前插入n个相同元素x

void insert(iterator it,const_iterator first,const_iteratorlast):把[first,last)间的元素插入迭代器指针it前

iterator erase(iterator it):删除迭代器指针it对应的元素

iterator erase(iterator first,iterator last):删除迭代器指针[first,last)间的元素

(4)    遍历函数

iterator begin():返回首元素的迭代器指针

iterator end():返回尾元素之后位置的迭代器指针

reverse_iterator rbegin():返回尾元素的逆向迭代器指针,用于逆向遍历容器

reverse_iterator rend():返回首元素前一个位置的迭代器指针

reference front():返回首元素的引用

reference back():返回尾元素的引用 

(5)    操作函数

void sort():容器内所有元素排序,默认是升序

template<class Pred>void sort(Pred pr):容器内所有元素根据预断定函数pr排序

void swap(list& str):两list容器交换功能

void unique():容器内相邻元素若有重复的,则仅保留一个

void splice(iterator it,list& li):队列合并函数,队列li所有函数插入迭代指针it前,x变成空队列

void splice(iterator it,list& li,iterator first):队列li中移走[first,end)间元素插入迭代指针it前

void splice(iterator it,list& li,iterator first,iterator last):x中移走[first,last)间元素插入迭代器指针it前

void reverse():反转容器中元素顺序

基本操作示例:

#include "stdafx.h"
#include<iostream>
#include<string>
#include<list>
using namespace std;
typedef list<string> LISTSTR;

int _tmain(int argc, _TCHAR* argv[])
{
<span style="white-space:pre">	</span>LISTSTR test;
<span style="white-space:pre">	</span>test.push_back("back");
<span style="white-space:pre">	</span>test.push_back("middle");
<span style="white-space:pre">	</span>test.push_back("front");

<span style="white-space:pre">	</span>cout<<test.front()<<endl;
<span style="white-space:pre">	</span>cout<<*test.begin()<<endl;


<span style="white-space:pre">	</span>cout<<test.back()<<endl;
<span style="white-space:pre">	</span>cout<<*(test.rbegin())<<endl;


<span style="white-space:pre">	</span>test.pop_front();
<span style="white-space:pre">	</span>test.pop_back();


<span style="white-space:pre">	</span>cout<<test.front()<<endl;
<span style="white-space:pre">	</span>return 0;
}
程序运行结果如下:

从上述代码可以看出list首尾元素的增加和删除都是非常容易的,test.front()相当于string& s=test.front(),返回了首元素的引用;test.begin()相当于list<string>::iterator it=test.begin(),返回了首元素的迭代器指针,因此test.front()于*test.begin()的结果是一致的。
#include "stdafx.h"
#include<iostream>
#include<string>
#include<list>
using namespace std;
typedef list<int> LISTINT;

int _tmain(int argc, _TCHAR* argv[])
{
	LISTINT test;
	for(int i=0;i<5;i++)
	{
		test.push_back(i+1);
	}

	LISTINT::iterator it = test.begin();
	for(;it!=test.end();it++)
	{
		cout<<*it<<"\t";
	}
	cout<<endl;

	//reverse show
	LISTINT::reverse_iterator rit = test.rbegin();
	for(;rit!=test.rend();rit++)
	{
		cout<<*rit<<"\t";
	}
	cout<<endl;
	return 0;
}
程序运行结果如下:

正向迭代器与逆向迭代器表示形式是不一样的,前者是iterator,后者是reverse_iterator。逆向显示并不会改变元素在容器中的位置,只是逆向显示。
#include "stdafx.h"
#include<iostream>
#include<string>
#include<list>
using namespace std;
typedef list<int> LISTINT;

int _tmain(int argc, _TCHAR* argv[])
{
	LISTINT test;
	test.push_back(1);
	test.push_back(5);
	test.push_back(3);
	test.push_back(10);

	LISTINT test2;
	test2.push_back(2);
	test2.push_back(8);
	test2.push_back(6);
	test2.push_back(9);

	test.sort();
	test2.sort();

	test.merge(test2);

	for(LISTINT::iterator it = test.begin();it!=test.end();it++)
	{
		cout<<*it<<"\t";
	}
	cout<<endl;
	cout<<test.size()<<"\t"<<test2.size()<<endl;
	return 0;
}
上面的代码展示了sort merge和splice的使用,程序运行结果如下:

从允许结果可以看出,两个链表merge合并前,一般都已经俺升序排好序,合并后的链表仍然是升序排列。merge操作是数据移动操作,不是复制操作,因此t1.merge(t2)表示把test2中所有元素依次移动并插入到源链表test的适当位置,test增加了多少个元素,test2就减少了多少个元素。若用test.splice(test.begin(),test2)代替程序中的test.merge(test2),其余不变,就能看出splice的特点。splice()完成的是拼接功能,也是数据移动操作,不慎复制操作。test.splice(test.begin(),test2)表明把test2中所有元素整体地移动到原始链表test的首元素前,test增加了多少个元素,test2就减少了多少个元素。如上述代码所述,test,test2排序后,test={1,3,5,10},test2={2,6,8,9}. test.splice(test.begin(),test2)后,test={2,6,8,9,1,3,5,10},test2={};test.merge(test2)后,test={1,2,3,5,6,8,9,10},test2={}




C++中STL用法超详细总结 目录 1 什么是STL? 2 STL内容介绍 2.1 容器 2.2 STL迭代器 2.3 算法 2.4 仿函数 2.4.1 概述 2.4.2 仿函数(functor)在编程语言中的应用  2.4.3 仿函数在STL中的定义 2.5 容器适配器 2.5.1 stack 2.5.2 queue &amp; priority_queue 3 常用容器用法介绍  3.1 vec... 阅读详情

相关推荐

【C++STL基础入门】list改、查操作

C++标准模板库(STL)是C++语言中非常重要的部分,它提供了一组通用的模板类和函数,用于处理常见的数据结构和算法问题。其中之一是list(链表),它是一种双向链表容器,提供了高效的插入和删除操作。本文将介绍如何使用C++ STL中的list进行改和查操作。list的改操作:在list中进行改操作主要包括插入(Insert)、删除(Erase)和替换(Replace)等操本文介绍了在C++ STL中使用list进行改和查操作的基本方法。通过插入、删除和替换操作,可以对list的内容进行修改。

m0_62599305的博客 2656

list用法

本文为转载文章 1.关于list容器 list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域...

ShineEternal的笔记小屋 679

C++ list 查找

#include <iostream> #include <list> #include <algorithm> using namespace std; int main() {   list<int> list1;   for (int k=0;k<10;k++)   {     list1.push_back(k);   }   for (int k=0;k<10;k++)   {     list1.insert(list1.end

我不是码农的博客~~~ 3076

STL之四:list用法详解

list容器介绍 相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。 常用函数 (1)    构造函数 list c:创建一个空的list list c1(c2):复制另一个同类型元素的list

longshengguoji的专栏 2万+

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 524

Docker一键部署NextCloud+OnlyOffice:打造企业级私有云办公环境(含HTTPS配置)

本文详细介绍了如何使用Docker Compose一键部署NextCloud与OnlyOffice,构建安全、高效的企业级私有云办公平台。内容涵盖从架构设计、Docker编排配置、HTTPS证书自动化管理,到系统初始化、性能优化及高级功能扩展的全栈实战指南,帮助企业实现数据自主可控与高效的在线文档编辑协作。

Apple的专栏 1241

C++ STL标准库: std::list使用介绍、用法详解

文章目录0. std::list 简介1 std::list 定义对象2 std::list添加元素3 std::list删除元素4 std::list容器容量5 std::list迭代器6 std::list判断是否为空7 std::list元素的存取和访问8 std::list元素重置9 std::list 交换两个容器的内容10 std::list元素的插入和删除11 std::list运算符函数12 std::list merge()和sort()13 std::list remove() 和 re

超级大洋葱的博客 11万+

动态刷新曲线_【GhPython应用】利用反射刷新Image sampler组件

【版权声明】| 作者:月之眼|案例图片来源:Sergiu Radu Pop的facebook| 如有侵权,请联系大水牛平台|如果觉得文章不错,欢迎分享效果展示利用python刷新Image sampler组件,主要的思路就是X输入端:输入要切换的图片路径,我的案例中输入了9张图片。然后通过100毫秒切换一张图片显示,来达到动态显示效果。代码分析run输入端类型:bool (I...

weixin_42393829的博客 532

C++ STL 中的 list 容器:用法与实现详解

链表作为一种动态结构,能够根据需要的在运行时灵活的插入、删除数据元素,而且它对储存单元没有过高的要求,不一定要求核内存是连续的、整块单元。相对于数组、字符串,由于 链表存储不连续,因此不能实现对它的随机访问。在链表中查找、定位数据元素效率较低。无论如何,在很多问题中,链表还是能大展身手的,并高效的解决问题。链表(Linked List)是一种线性数据结构,由一系列**节点(Node)**组成。每个节点包含两个部分:数据域:存储实际的数据。指针域:存储指向下一个节点(或上一个节点)的地址。

m0_59858691的博客 1729

HDMI 2.1超高清传输背后的“隐形功臣”:深入浅出图解VESA DSC压缩核心流程

本文深入解析HDMI 2.1超高清传输中的VESA DSC压缩技术,揭示其如何在不损失画质的前提下实现带宽减半。通过切片并行处理和智能算法,DSC技术有效解决了8K/4K高帧率视频的传输瓶颈,成为现代显示设备不可或缺的“隐形功臣”。

weixin_30615767的博客 423

AI算力瓶颈与系统优化实战指南

AI算力瓶颈已成为制约人工智能发展的关键因素,特别是在处理transformer类模型时,传统的冯·诺依曼架构面临严重的'内存墙'问题。通过硬件加速、系统优化和算法改进的三级策略,可以有效提升资源利用率。在嵌入式AI领域,结合量化、剪枝和专用指令集扩展等技术,能在资源受限设备上实现高效推理。这些优化方法在自动驾驶、工业视觉等场景中已展现出显著价值,推动AI应用从云端向边缘迁移。随着AI算力需求的持续增长,掌握系统优化技能将成为开发者的核心竞争力。

weixin_32597009的博客 342

[转] C++ STL标准库: std::list使用介绍、用法详解

https://blog.youkuaiyun.com/u014779536/article/details/111301635

sroman的博客 4631

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5505

C++ STL 之 list 与 forward_list 详解:用法→原理→面试

本文详细介绍了C++ STL中的链表容器list和forward_list的使用方法、核心原理及面试要点。list是双向链表,forward_list是单向链表,主要优势是O(1)时间复杂度的任意位置插入/删除操作。 内容分为三部分:首先讲解初始化、元素访问、增删改查等基础用法;然后重点解析list的核心操作splice,它能在O(1)时间内移动节点;最后给出面试常见问题的解答。文中包含大量代码示例和图解说明,特别适合C++开发者系统学习链表容器的特性和底层实现原理。 (字数:150字)

Rick_Theseusr的博客 373

uniapp - 解决真机调试报错 request:fail abort statusCode:-1 java.security.cert.CertPathValidatorException: Tr

uni-app,真机调试报错,app端平台,安卓Android,安卓App发布线上报错,打包后接口请求失效了,api接口报错,真机运行安卓app时接口不通且报错,request:failabortstatusCode:-1java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.,真机调试,苹果ios真机报错,Uniapp打包到app后报错,uni-app真机调试报错,服务器

🏆 前端领域优质创作者 1万+

ESD防护设计宝典(十):RE(辐射发射)超标问题排查与解决

RE测试是EMC认证的“头号杀手”。当屏幕上出现一根根超标频谱线时,如何快速定位元凶并有效整改?本讲将带你化身电磁侦探,完成一次完美的RE问题“缉凶”。

m0_56451176的博客 394

C++学习 STL之四:list用法详解

list容器介绍 相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。 常用函数 (1)    构造函数 list c:创建一个空的list list c1(c2):复制另一个同类型元素的list

skdkjxy的专栏 983

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++:STL-容器、算法、迭代器知识点与用法详解-list、set/multiset、pair(3)

本文重点对C++STL的list容器和set容器、multiset、pair容器知识点、函数相关用法进行详解。

Bellwen的博客 539

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C++ STL核心组件解析:容器、迭代器与算法实战指南

在C++编程中,数据结构与算法是构建高效软件的基础。STL(Standard Template Library)作为C++标准库的核心组成部分,通过泛型编程思想,将常用的数据结构和算法抽象为可复用的模板组件。其设计原理基于容器、迭代器、算法的分离,实现了数据存储与操作的解耦,从而提升代码的通用性和性能。这一设计使得开发者能够专注于业务逻辑,而非底层实现细节,极大地提高了开发效率和代码质量。在工程实践中,STL的容器如vector、map等,配合迭代器和泛型算法,能够应对数组操作、查找排序、内存管理等高频需求

weixin_30883311的博客 406

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ STL list双向链表:核心特性、性能对比与实战应用详解

在C++标准模板库(STL)中,容器是数据存储与管理的核心组件。vector凭借连续内存布局提供了高效的随机访问,但在频繁插入删除场景下性能受限。双向链表作为一种基础数据结构,通过节点指针链接实现元素逻辑串联,其核心优势在于任意位置的常数时间插入删除操作,无需移动其他元素。这一特性在需要稳定迭代器或处理大型对象的工程实践中价值显著,例如实现LRU缓存淘汰算法、消息队列或实时事件处理系统。本文聚焦std::list,深入解析其基于双向链表的内部结构、迭代器失效规则,并通过性能对比揭示其与vector的适用边界

weixin_29758911的博客 246

C++中的List容器用法详解

在C++中,可以使用多种方式创建和初始化listlist是C++标准模板库中非常强大的容器之一,它提供了快速的插入和删除操作,并且支持双向迭代。通过本文的介绍,你应该对list的基本用法有了一个大致的了解。在实际编程中,根据具体需求选择合适的容器是非常重要的,list适合于那些需要频繁插入和删除元素的场景。希望这篇文章能够帮助你更好地理解和使用C++中的list容器。如果你有任何问题或需要进一步的解释,请随时在评论区留言。

Q741_147的博客 2534

C++STL(2) list容器汇总

std::list是C++标准库提供的双向链表容器。与不同,std::list不是基于连续内存存储元素的,而是通过指针链接各个元素。这使得std::list在插入和删除元素时具有更好的性能,但在随机访问元素时性能较差。下面是std::list双向链表std::list的元素以双向链表的形式存储,每个元素都包含指向前一个元素和后一个元素的指针。插入和删除:由于链表的特性,std::list在插入和删除元素时效率很高,不需要移动其他元素。插入和删除操作的时间复杂度为O(1)。无需重新分配内存....

WDJ54068923的博客 196

C++STL之list的使用详解

list为双向链表,即struct中包含一个数据和两个指针,分别指向前一个节点和后一个节点。在堆上分配空间,每插入一个元素都会分配空间,每删除一个元素都会释放空间;插入、删除时间复杂度为O(1)。

请叫我皮皮虾的博客 1881

c++ list, vector, map, set 区别与用法比较

c++ list, vector, map, set 区别与用法比较 原文链接:https://www.cnblogs.com/smiler/p/4457622.html List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。 Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到

CL820211的博客 317

【总结】C++ 基础数据结构 —— STL之链表(list)用法详解

文章目录一、list 的介绍二、list 的基本操作三、list 的用法 一、list 的介绍 list 是 STL 中的一个序列容器,实现的是双向链表,每个元素都有两个指针,分别指向元素的前驱和后继。 list 不需要指定内存大小,因为他存储在不连续的内存空间中,并由指针将他们连接在一起。 由于链表的特点,不能进行内部的随机访问,无法通过位置来访问元素,即不支持[ ] 操作符和ve...

360°顺滑 2万+

【C++】STL中的list容器详解及常用函数用法

list高效插入和删除:在已知位置插入或删除元素的时间复杂度为 O(1),远高于vector的 O(n)。不支持随机访问:与数组不同,list不支持通过下标访问,因此需要通过迭代器进行遍历。双向链表:支持从头部和尾部同时遍历,方便实现一些特定算法。

weixin_74837455的博客 2731
上一篇: 二叉树的递归和非递归遍历方法
下一篇: 判断二叉树是否平衡
moses1213
博客等级 码龄12年 56粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值