容器vector和迭代器iterator的学习使用

4-2 读配置文件、查泄漏、设置标题实战 文章目录一:基础设施之配置文件读取(1.1)前提内容和修改(1.2)配置文件读取功能实战代码二:内存泄漏的检查工具(2.1)memcheck的基本功能,能发现如下的问题;(2.2)内存泄漏检查示范三:设置可执行程序的标题(名称)(3.1)原理和实现思路分析源码部分:ngx_c_conf.hngx_func.hngx_global.hngx_signal.hngx_string.cxxnginx.c... 阅读详情

vector、algorithm、deque、functional、iterrator、list、map、memory、numeric、queue、set、stack、utility

vector的声明:

vector<type> vec;
size();resize();at();front();back();begin();end();rbegin();rend();empty();assign();swap();clear();erase();insert()
vector&oprator=(const vector& vec);
迭代器的声明 :

vector<type>::iterator it;  
vector<type>::const_iterator it;  
vector<type>::reverse_iterator it;  
vector<type>::const_reverse_iterator it;  

  1. 存取元素的方法
    1. vec[i] - 存取索引值i 的元素。第一vec[0]
    2. vec.at(i) - 存取索引值 i 的元素的參照,以 at() 存取會做陣列邊界檢查,如果存取越界將會拋出一個例外,這是與operator[]的唯一差異。
    3. vec.front() - 回傳 vector 第一個元素的參照。
    4. vec.back() - 回傳 vector 最尾元素的參照。
  2. 新增或移除元素的方法
    1. vec.push_back() - 新增元素至 vector 的尾端,必要時會進行記憶體配置。
    2. vec.pop_back() - 刪除 vector 最尾端的元素。
    3. vec.insert() - 插入一個或多個元素至 vector 內的任意位置。
    4. vec.erase() - 刪除 vector 中一個或多個元素。
    5. vec.clear() - 清空所有元素。
  3. 取得長度/容量
    1. vec.size() - 取得 vector 目前持有的元素個數。
    2. vec.empty() - 如果 vector 內部為空,則傳回 true 值。
    3. vec.capacity() - 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。
  4. 重新配置/重設長度
    1. vec.reserve() - 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。
    2. vec.resize() - 改變 vector 目前持有的元素個數。
  5. 迭代 (Iterator)
    1. vec.begin() - 回傳一個Iterator,它指向 vector 第一個元素。
    2. vec.end() - 回傳一個Iterator,它指向 vector 最尾端元素的下一個位置(請注意:它不是最末元素)。
    3. vec.rbegin() - 回傳一個反向Iterator,它指向 vector 最尾端元素的。
    4. vec.rend() - 回傳一個Iterator,它指向 vector 的第一個元素。

简单应用:

#include <iostream>
#include<vector>
using namespace std;
int main()
{

	vector<int> v;
	cout<<"在后面插入元素 "<<endl;;
	for(int i=0;i<10;i++){
	 v.push_back(i);
	}
	cout<<"删除最后一个元素 "<<endl;;
	v.pop_back();
	v.pop_back();
	cout<<"打印 "<<endl;;
	for(size_t i=0;i<v.size();i++){

        cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl;

	}
	cout<<"使用front()、at()、back() "<<endl;
	cout<<v.front()         //front()、back()、back()也能充当可修改的左值
	    <<"-"<<v.at(4)
	    <<"-"<<v.back()<<endl;

	cout<<"判断不为空、插入元素"<<endl;;
        for(int i=0;i<10;i++){
		if(!v.empty())
	    v.push_back(++i);
	}
        cout<<"打印vector数组元素"<<endl;;
	for(size_t i=0;i<v.size();i++){

		 cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl;

	}

    return 0 ;
}
比较全面的应用:

#include <iostream>
#include<vector>
#include <cstdlib>
using namespace std;
int main()
{
	vector<int> v1;
	vector<int>::iterator it;
	for(int i=0;i<10;i++){

		v1.push_back(i);

	}
	cout<<"正向输出:"<<endl;
	for(it=v1.begin();it!=v1.end();it++){

		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"反向输出:"<<endl;
	vector<int>::reverse_iterator rit;
	for(rit=v1.rbegin();rit!=v1.rend();rit++){

			cout<<*rit<<" ";
		}

	cout<<endl<<"--------------------------------------"
		<<endl<<"v2:"<<endl;
	int arr[]={0,1,2,3,4,5,6,7,8,9};
	vector<int> v2(arr,arr+10);         //将arr数组复制到容器v2中去
	vector<int>::iterator it2;
        for(it2=v2.begin();it2!=v2.end();it2++){

		cout<<*it2<<" ";
	}

        cout<<endl<<"v3:"<<endl;
	vector<int> v3(v2.begin(),v2.end());//利用构造函数初始化容器v3
	vector<int>::iterator  it3;
	for(it3=v3.begin();it3!=v3.end();it3++){
		cout<<*it3<<"  ";
	}

	cout<<endl<<"v4:"<<endl;
	//erase和insert对于const iterater和const reverse_itetater并不支持
	vector<int> v4(10,10);
	vector<int>::iterator  it4;
	for(it4=v4.begin();it4!=v4.end();it4++){

		cout<<*it4<<"  ";
	}
	//resize()的使用
        cout<<endl<<"v1大小:"<<v1.size()<<endl<<"v2大小:"<<v2.size()
		<<endl<<"v3大小:"<<v3.size()<<endl<<"v4大小:"<<v4.size()
    	<<endl;

        v3.resize(10,0);
        cout<<"resize()为10后v3的大小:"<<v3.size()<<endl;
        for(int i=0;i<(int)v3.size();i++){

    	       cout<<v3[i]<<" ";
       }

    	v3.resize(5);
    	cout<<endl<<"resize()为5后v3的大小:"<<v3.size()<<endl;
    	for(int i=0;i<(int)v3.size();i++){

        	cout<<v3[i]<<" ";
  	 }
 	 //擦除的使用
  	 v1.clear();
  	 cout<<endl<<"v1全擦除后的大小:"<< v1.size()<<endl;


   	cout<<"插入操作insert()";
   	vector<int>::iterator itx;
	itx=v1.begin();
        cout<<endl<<"在位置1插入88"<<endl;;
  	v1.insert(itx,88);//在开始的位置插入111,
  	for(int i=0;i<(int)v1.size();i++){

           	cout<<v1[i]<<" ";
   	}
	
   	cout<<endl;
   	v1.insert(itx,10,5);//从位置0开始连续插入10个5;
   	for(int i=0;i<(int)v1.size();i++){

		cout<<v1[i]<<" ";
   	}

  	cout<<endl<<"擦除位置5到位置10的元素"<<endl;
   	v1.erase(itx+5,itx+10);    //擦除位置5到位置10的元素、
   	for(int i =0;i<(int)v1.size();i++){

	   cout<<v1[i]<<"  ";
  	 }
  	 v1.clear();
  	 cout<<endl<<"全擦除后v1大小"<<v1.size()<<endl;

   	vector<int> vec;
   	vec.swap(v2);
   	vec.reserve(1000);
   	cout<<vec.size()<<endl;


   	return 0 ;
}



        
vector对象的定义和初始化以及vector迭代器iterator vector对象的定义和初始化 vector类定义了好几种构造函数,用来定义和初始化vector对象。 vectorT> v1; vector保存类型为T的对象。默认构造函数v1为空。 vectorT>v2(v1); v2是v1的一个副本。 vectorT>v3(n,i); v3包含n个值为i的元素。 阅读详情

相关推荐

C++容器vector及迭代器对象iterator

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<double> Vecdouble = {99.3,46.1,26.1,44.3}; Vecdouble.push_back(100.5...

Henry_Zhao的博客 818

vector<int>::iterator it

迭代器类型提供了比下标操作更一般化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。如果ivec为空,则begin返回的迭代器不指向任何元素,由于没有元素,所以它不能指向任何元素——在这种情况下,从begin操作返回的迭代器与从end操作返回的迭代器的值相同,因此for语句中的测试条件立即失败。除了使用下标来访问vector对象的元素外,标准库还提供了另一种检测元素的方法:使用迭代器(iterator),它是一种允许程序员检查容器内元素,并实现元素遍历的数据类型。

m0_73075606的博客 1554

NU1680无线充电接收器在TWS耳机中的应用实战:I2C调压与QI协议适配

本文详细解析了NU1680无线充电接收器在TWS耳机充电仓设计中的应用实战。重点阐述了其无固件设计、I2C接口动态调压功能如何解决不同QI协议发射器的兼容性难题,并分享了硬件设计、PCB布局、与发射端联调及安全测试等关键环节的实践经验,助力开发者快速实现稳定高效的无线充电方案。

weixin_28432777的博客 233

“vector” 中的 “iterator”

Vector and Iterator   向量vector是C++标准模板库中的内容。vector是一个容器,他能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小,使用向量时需要在程序中添加< vector>头文件   所有的标准库容器类都定义了相应的iterator容器,如vector, vector::iterator iter; ...

追梦_1394270543的博客 9835

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

超实用!用ChimeraX对AlphaFold 结果可视化(中): 蛋白结构美化篇

而一般需要的背景颜色是无色(白色),有三种方法可以更改背景颜色,这里我们介绍两种方法,第三种在下一小节中讲解。如果想选中蛋白链中的某一结构区域或者某些位点,可以用Ctrl+Shift+鼠标左键,或在软件窗口中点击。在这个窗口中可以对蛋白的主链、侧链、表面等颜色进行修改,只用在。,即可在右下角看到我们蛋白的序列信息,在这里面直接用鼠标选择要选择的结构域。就会有更多的颜色供我们选择,如果有特定的色号还可以在这个界面继续选择。后面的颜色(②),就可以选择想要的任何背景颜色(③)。就可以选择软件推荐的常用颜色。

m0_63153079的博客 5488

vector容器与iterator迭代器

vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库负责管理存储元素的相关内存。我们把vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。 使用vector之前,必须包含相应的头文件。 #include using std::vector; vector是一个类模板(class

sead+ 4万+

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7065

【C++从0到王者】第十三站:vector源码分析及手把手教你如何写一个简单的vector

手把手教你写一个vector

青色_忘川的博客 2325

JavaScript实现斗地主(附完整源码)

JavaScript实现斗地主(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1505

包络检波电路(Envelope Detector)

把 100 kHz 载波想象成"电台的高频信号",把 1 kHz 包络想象成"主持人说话的声波"。而今天电路的工作,就是把这个"调大调小的外壳"(包络)重新剥出来,还原成主持人的声音 🎵。这是三极管开关电路的重要搭档,也是从"二极管家族"过渡到"三极管家族"的桥梁 🔌。——倍压整流看的是"幅值累积"(多个电容接力),包络检波看的是"频率分离"(高低频分开)。同样的"D1 串联 + RC 并联"拓扑,今天被赋予了"AM 解调"的新生命。——电感负载的"泄洪闸",保护三极管开关不被反向电动势击穿。

飞多学堂的博客 97

C++ Primer学习笔记(3)——神奇的容器vector及其迭代器iterator

除了简单的内置数据类型int ,char, float, double , bool等,C++标准库定义了几种更高级的抽象数据类型,包括string 和vector 类型。string提供了变长的字符串,在上一篇博客中有写到,而vector类型则可用于管理同一类型的对象,是一个集合。迭代器实现了对存储于容器中对象的间接访问,可用于访问和遍历string和vector类型的元素。

zhangyumumu的博客 612

AgentScope深入分析-ReActAgent

ReActAgent 是 AgentScope 框架中最核心的智能体实现,它完美诠释了"推理-行动"(Reasoning-Acting)循环的精髓。本文将深入分析 ReActAgent 的类继承关系、核心执行流程,以及状态管理、钩子机制、实时介入等关键技术点。通过阅读本文,你会理解智能体如何与模型交互、如何执行工具、如何处理中断,以及这些机制背后的设计考量。模块化:通过组合不同的组件(模型、格式化器、工具集、记忆)来构建智能体透明性:所有关键流程都对开发者可见,可以精确控制可扩展性。

842

【c++STL——第十一讲】iterator系列 (常用知识点总结)

ฅ(๑˙o˙๑)ฅ 大家好, 欢迎大家光临我的博客:面向阿尼亚学习 算法学习笔记系列持续更新中~ 文章目录一、前言二、bit set的定义三、bit set的基本运算四、bit set的常用函数五、bit set的作用最后 一、前言 在 C++ 中,严格来说,bitset并不属于stl容器的范畴,它也不支持指示器的操作。bitset提供了对数据的位操作。 bit set 压位 即如其名,bit set储存的是二进制。 它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit.

m0_63233163的博客 3643

UFS软件分区介绍

本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识

肥匪斐's blogs 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++之【深入理解Vector】三部曲之一

在我们学习了string类之后,我们来学习一个新的容器vector,在我们学习这个新的容器的时候,一定不要忘记复习string类。

moxuezhendecai的博客 304

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++ Primer(第四版)笔记3 迭代器简单总结

迭代器的简介:迭代器是一种检查容器内元素并遍历元素的数据类型。 所有的标准库容器都定义了相应的迭代器类型,只有少数的容器支持下标操作。 1.容器的iterator类型 每种容器都定义了自己的迭代器类型,如vector: vector::iterator iter; 2.begin和end begin返回的迭代器指向第一个元素: vector::iterator i

liandliao的专栏 304

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迭代器

容器的iterator类型 vector<T>::iterator iter; 迭代器是一种检查容器内元素并遍历元素的数据类型。 begin和end操作 vector<T> vec; vector<T>::iterator iter = vec.begin(); //若vec不为空,则iter指向ivec[0] ...

weixin_30575309的博客 66

vector删除单个元素

vector::iterator本来就是随即存取的啊,可以直接在其对象上加或者减去一定的偏移量: #include #include #include using namespace std; int main() {     vector ivec;     for(int i = 0; i         ivec.push_back(i*2);    

wuxinliulei的专栏 2450

vector<int>::iterator it 迭代器的使用

vector vect; vector::iterator it = vect.begin(); 首先定义了一个int类型的向量;然后定义了一个具有int元素的迭代器类型。it的类型就是vector::iterator。 vector vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector和vector 都是数据类型。 vector对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。因为vect

claraone的博客 8870

C++迭代器(iterator)

什么是迭代器 迭代器是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。 C语言有指针,指针用起来十分灵活高效。 C++语言有迭代器,迭代器相对于指针而言功能更为丰富。 vector,是数

weixin_47700137的博客 5万+

C++迭代器一:string字符串对象的迭代器iterator实现、实现vector容器的迭代器

文章目录一、string字符串对象的迭代器iterator实现二、实现vector容器的迭代器 一、string字符串对象的迭代器iterator实现 我们先来看这个例子:使用库中的string,那么string的对象str1叫容器吗? string str1 = "hello world!";//str1叫容器吗? 叫容器,其底层放了一组char类型的字符,也是容器。 若想用指针遍历其底层字符...

Rain的博客 1万+

【C++】STL 容器 - vector 动态数组容器 ⑥ ( 使用迭代器遍历 vector 容器步骤 | 获取指容器向首元素的迭代器 begin 函数 | 获取末尾迭代器 | * 迭代器解引用 )

一、 使用迭代器遍历 vector 容器步骤 1、使用迭代器遍历 vector 容器的步骤 2、代码示例 - 使用迭代器遍历 vector 容器 二、 iterator 迭代器常用 api 简介 1、vector 容器类 begin 函数 - 获取指容器向首元素的迭代器 2、vector 容器类 end 函数 - 获取末尾迭代器 3、iterator 迭代器类解引用操作 - operator* 重载运算符函数 4、iterator 迭代器自增操作 - operator++ 重载运算符函数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2797

【C++】STL 容器 - vector 动态数组容器 ⑦ ( 迭代器 iterator 基本原理 | 迭代器 iterator 分类 | 双向迭代器 | 随机访问迭代器|迭代器正向遍历与逆向遍历 )

一、 迭代器 iterator 基本原理 1、迭代器 iterator 作用 2、迭代器 iterator 分类 3、双向迭代器 4、随机访问迭代器 二、 迭代器 iterator 正向遍历与逆向遍历 1、迭代器正向遍历与逆向遍历 2、使用迭代器正向遍历 vector 容器 3、使用迭代器反向遍历 vector 容器

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2807

C++迭代器iterator详解

迭代器有什么用处?泛型算法的参数为什么接收的都是迭代器?迭代器iterator是C++ STL的组件之一,作用是用来遍历容器,而且是通用的遍历容器元素的方式,无论容器是基于什么数据结构实现的,尽管不同的数据结构,遍历元素的方式不一样,但是用迭代器遍历不同容器的代码是完全一样的。实际上,C++11新标准的foreach语句,对于容器的遍历就是通过迭代器迭代器一般实现为容器的嵌套类型,在容器内部提供具体的实现。但是容器不同,底层元素遍历的方式也不同,那么为什么说迭代器遍历所有容器的方式是一样的呢?

ljy的博客 2248

从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员

一、迭代器 迭代器是泛型指针 普通指针可以指向内存中的一个地址 迭代器可以指向容器中的一个位置 STL的每一个容器类模版中,都定义了一组对应的迭代器类。使用迭代器,算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。 下面来稍微看一下iterator 和 reverse_iterator 的源码:  C++ Code

Meditation 1万+
上一篇: template的应用
下一篇: 九度oj-1115-1062-1067
-逗你玩儿-
博客等级 码龄14年 76粉丝 121原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值