首页 > 编程语言 >4.2.2、容器,算法,迭代器 初识

4.2.2、容器,算法,迭代器 初识

时间:2024-03-25 16:14:09浏览次数:27  
标签:容器 vector 迭代 4.2 back Person 初识 push

了解STL中容器、算法、迭代器概念之后,我们利用代码感受STL的魅力

STL中最常用的容器为Vector,可以理解为数组,下面我们将学习如何向这个容器中插入数据、并遍历这个容器

1、vector存放内置数据类型

容器:vector
算法:for_each
迭代器:vector<int>::iterator

void MyPrint(int val)
{
	cout << val << endl;
}

void test01()
{
	//创建vector容器对象,并且通过模板参数指定容器中存放的数据的类型
	vector<int> v;
	//向容器中存放数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);

	//每一个容器都有自己的迭代器,迭代器是用来遍历容器中的元素
	//v.begin()返回迭代器,这个迭代器指向容器中第一个数据
	//v.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置
	//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型

	vector<int>::iterator pBegin = v.begin();	//起始迭代器,指向容器中第一个元素
	vector<int>::iterator pEnd = v.end();		//结束迭代器,指向容器中最后一个元素的下一个位置

	//第一种遍历方式
	while (pBegin != pEnd)
	{
		cout << *pBegin << endl;
		pBegin++;
	}
	
	//第二种遍历方式
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << endl;
	}
	
	//第三种遍历方式,利用STL提供遍历算法
	for_each(v.begin(), v.end(), MyPrint);
}

int main()
{
	test01();
	return 0;
}

2、vector存放自定义数据类型

学习目标:vector中存放自定义数据类型,并打印输出。

#include<iostream>
#include<vector>
using namespace std;

class Person 
{
public:
	Person(string name, int age)
	{
		m_Name = name;
		m_Age = age;
	}
public:
	string m_Name;
	int m_Age;

};

void test01()
{
	vector<Person> v;
	
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);

	//向容器中添加数据
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	v.push_back(p5);

	//遍历容器中的数据
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;
		//第二种方式:
		cout << "姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;

	}

}

//放对象指针
void test02() {

	vector<Person*> v;

	//创建数据
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);

	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);
	v.push_back(&p5);

	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) 
	{
		Person* p = (*it);
		cout << "姓名:" << p->m_Name << "\t年龄:" << (*it)->m_Age << endl;
	}
}

int main()
{
	test01();
	test02();
	return 0;
}

3、Vector容器嵌套容器

学习目标:容器中嵌套容器,我们将所有数据进行遍历输出。

#include<iostream>
using namespace std;
#include<vector>

//容器嵌套
void test()
{
	vector<vector<int>> v;		//创建一个嵌套的大容器v
		
	vector<int> v1;		//创建容器内的小容器v1
	vector<int> v2;
	vector<int> v3;
	vector<int> v4;

	//利用for循环向容器中添加数据
	for (int i = 0; i < 4; i++)
	{
		v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
	}

	//然后将容器元素插入到大容器v中
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	//通过双层for循环来遍历嵌套容器
	for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
	{
		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
		{
			cout << *vit << " ";
		}
		cout << endl;
	}
}

int main()
{
	test();
	return 0;
}

标签:容器,vector,迭代,4.2,back,Person,初识,push
From: https://www.cnblogs.com/H43724334/p/18091642

相关文章

  • 这可能是国内Qt/C++界最受欢迎开源项目之一/5.8Kstar/持续迭代更新
    一、前言本项目大概在2020年开始的,大概在2022年重写了一遍,主要是分门别类存放。本项目主要是QWidget编写的一些开源的demo,支持Qt4、Qt5、Qt6,支持任意系统,预计会有100多个,一直持续更新完善,代码简洁易懂注释详细,每个都是独立项目,非常适合初学者,代码随意传播使用。不仅有界面UI相关,......
  • JavaScript初识及基本语法详解
    JavaScript是一种高级的脚本语言,它在Web开发中扮演着至关重要的角色,主要用于增强用户与HTML页面的交互过程。以下是JavaScript的一些基本概念和语法要点:简介:JavaScript是三大Web技术之一(HTML、CSS和JavaScript),它能使网页从静态变为动态互动,广泛应用于Web应用开发。控制HTML:Jav......
  • 协程与迭代器
    自己实现unity的协程功能_c#实现类似unity的协程-CSDN博客前天和同事聊天,聊起来协程,聊起原理,什么迭代器,什么MoveNext几句话带过之后就算完了,事后再次想起,发现自己已经忘了具体细节,于是也打算写成博客,供自己以后回应一句话概括(yield外部的)(会运行的)代码行,会被放到MoveNext()中(......
  • 初识C++(二)引用,内联函数,auto
    目录1.引用的概念与用法:1.1引用特性:1.2使用场景    1.2.1做参数1.3传值、传引用效率比较1.4引用做返回值1.5引用和指针的对比2.内联函数3.auto关键字4.基于范围的for循环(C++11)5.指针空值nullptr(C++11)1.引用的概念与用法:    引用是一个重要的......
  • EANet:用于医学图像分割的迭代边缘注意网络
    EANet:用于医学图像分割的迭代边缘注意网络摘要引言相关工作方法看一下的论文EANet:Iterativeedgeattentionnetworkformedicalimagesegmentation–2022摘要医学图像的精确自动分割对临床诊断和分析有着重要的帮助。然而,由于(1)医学图像目标的尺度多样性和(2)医......
  • Day25 迭代器之Iterator底层
    Day25迭代器之Iterator底层一、迭代器1、概念:迭代器(Iterator)是一种用于遍历集合(Collection)元素的接口,它提供了统一的方式来访问集合中的元素,而不暴露集合的内部结构。通过迭代器,我们可以依次访问集合中的每个元素,进行遍历和操作。2、使用步骤:获取集合的迭代器:Iterat......
  • QT5.14.2 Qt5组件随心所欲,从界面到实用一把抓
    Qt5作为跨平台的C++图形界面框架,自带了丰富的组件供我们使用。无论是构建精美的UI界面,还是满足各种实用的需求,Qt5总能为我们意趣盎然地施展绝活。今天,就让我们一同探索Qt5中的日历组件、登录窗口、文件对话框、颜色选择对话框、进度条和Timer组件,见识它们的强大之处!一、......
  • python之迭代器和生成器的使用方式
    下面我将分别介绍迭代器和生成器的使用示例:迭代器示例:迭代器是一种对象,它可以在遍历时逐个访问元素而不需要将所有元素加载到内存中。下面是一个简单的迭代器示例,该迭代器生成斐波那契数列的前n个数字:classFibonacciIterator:def__init__(self,n):self.n=......
  • 4.2、STL初识
    1、STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西。C++面向对象和泛型编程思想,目的就是复用性的提升。大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量的重复工作。为了建立数据结构和算法的一套标准,诞生了STL。2、STL的基本概念STL(standa......
  • 【OceanBase】v4.2.1 集群命令汇总
    查看集群信息#查看所有集群obdclusterlist#启动集群ob3clusterobdclusterstartob3cluster#停止集群obdclusterstopob3cluster登录数据库#root用户的sys租户登录数据库obclient-hxxx.xxx.xxx.xxx-uxxx:sys:root-P2883-pxxxxxx-c-A-DOceanbas......