stl容器的使用:vector、deque、stack模型

stl中容器、算法、迭代器的3大概念

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
#include <windows.h>
#include "vector"  //容器 vector
#include "algorithm" //迭代器
using namespace std;
//1。容器:把你的元素copy到容器中,实现了数据结构与算法的分离
//2.迭代器:相当于一个指针
//3.算法:
int main()
{
	//容器
	vector<int>  v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);

	//利用迭代器进行遍历
	//迭代器 iterator 指向 v1的首元素地址
	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		cout << *it << endl;
	}

	//算法:别人写好的
	int num = count(v1.begin(), v1.end(), 1);//算法 count 统计v1中等于1的数的个数
	cout << num << endl;


	system("pause");
	return 0;
}

vector:

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
#include <windows.h>
#include "vector"
using namespace std;
//1.vector是一个将元素置于动态数组中加以管理的容器
//2.vector可以随机存取元素(支持索引值直接存取,用[]操作或at()方法)
//3.vector尾部添加或移除元素会很快,但是在中部或头部插入或移除元素比较费时

//vector采用模板类实现,vector对象的默认构造形式:vector<T> vecT;

//class CA{};
//vector<CA*> vecpCA; //用于存放CA对象的指针的 vector容器
//vector<CA> vecCA;   //用于存放CA对象的 vector容器
//由于容器元素的存放是按值赋值的方式进行,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常

void main01()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);

	cout << "头部元素:" << v1.front() << endl;//获取头部元素,返回的是引用,可以当做左值

	while (v1.size() > 0)
	{
		cout << v1.back() << endl;  //获取vector尾部元素
		v1.pop_back();              //删除尾部元素
	}
}

//vector 初始化
void main02()
{
	//1.
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	//2
	vector<int> v2 = v1;

	vector<int> v3(10);//主动要求分配内存
	v3.push_back(100);
	v3.push_back(200);  //放到底部,所以长度变成12,前十个为 0
}

//vector 遍历
void main03()
{
	vector<int> v3(3);//主动要求分配内存
	for (int i = 0; i < 3; i++)
	{
		v3[i] = i+1;
	}
	//迭代器遍历
	// 迭代器end()的理解
	//当 it == v3.end() 时,说明这个容器已经遍历完毕了,所以 end()的位置,在 vector尾部元素的后面
	for (vector<int>::iterator it = v3.begin(); it != v3.end(); it++)
	{
		cout << *it <<" ";
	}

	//迭代器种类
	//逆向遍历
	for (vector<int>::reverse_iterator rit = v3.rbegin(); rit != v3.rend(); rit++)
	{
		cout << *rit << " ";
	}
}

//vector 删除
void main04()
{
	vector<int> v1(10);//主动要求分配内存
	for (int i = 0; i < 10; i++)
	{
		v1[i] = i + 1;
	}
	//区间删除
	//v1.erase(v1.begin(), v1.begin() + 3);//从开头删除3个

	//指定元素删除
	//v1.erase(v1.begin()); 

	for (vector<int>::iterator it = v1.begin(); it != v1.end();)
	{
		if (*it == 2)
		{
			it = v1.erase(it); //当删除迭代器所指向的元素的时候,erase删除函数会返回下一个元素的指针,让it去接,实现自动下移
		}
		else
		{
			it++;
		}
	}

	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		cout << *it << " ";
	} 

}

//插入
void main05()
{
	vector<int> v1(10);//主动要求分配内存
	for (int i = 0; i < 10; i++)
	{
		v1[i] = i + 1;
	}

	v1.insert(v1.begin(), 100);  //在v1的begin插入 100

	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		cout << *it << " ";
	}

}

int main()
{
	//main01();
	main05();
	system("pause");
	return 0;
}

deque:

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
#include <windows.h>

#include "deque"

using namespace std;

//deque 双端数组, 可以在头部和尾部进行插入和删除 push_back(),pop_back(),push_front(),pop_front()
//vector只能在尾部插入和删除

void pritD(deque<int> &d)
{
	for (deque<int>::iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it <<" ";
	}
}

void main01()
{
	deque<int> d1;
	d1.push_back(3);
	d1.push_back(5);
	d1.push_front(-1);
	d1.push_front(-2);
	pritD(d1);

	//查找值为 5 的数组下标值
   // find 返回一个迭代器
	deque<int>::iterator it = find(d1.begin(), d1.end(), 5); //从d1 的开始到结束,查找5
	if (it != d1.end())
	{
		cout << "值为5的下标为: " <<distance(d1.begin(),it); //偏移量,从d1的开始 ,偏移 it
	}
	else
	{
		cout << "没有找到" << endl;
	}


}
int main()
{
	main01();
	system("pause");
	return 0;
}

stack 和 queue

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
#include <windows.h>

#include "stack"
#include "queue"
using namespace std;

//stack  元素先进后出
void main01()
{
	stack<int> s1;
	//入栈
	for (int i = 0; i < 10; i++)
	{
		s1.push(i + 1);
	}

	cout << "栈的大小: " << s1.size() << endl;
	//出栈
	while (!s1.empty())
	{
		int temp = s1.top(); //获取栈顶元素
		cout << temp << endl;

		s1.pop();			//弹出栈顶元素
	}
}

//queue 队列模型: 元素先进先出

void main02()
{
	queue<int> q;
	//入栈
	q.push(1);
	q.push(2);
	q.push(3);

	cout << "队头元素:" << q.front() << endl;
	cout << "队列大小:" << q.size() <<  endl;

	//出栈
	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
}
int main()
{
	//main01();
	main02();
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值