C++中级(二) C++ 容器及迭代器:容器即数据存储的方式。迭代器即遍历容器的方法。

一、简介

本文将介绍C++容器和迭代器。

首先,我是一个C++菜鸟。之前一直在WPF/C#的东西。但是由于同事 要离职,并且他之前用C++做的DLL,用了接口、容器、迭代器等知识。虽然之前有一些C++基础,现在迫于项目需要,所以我拼着我吃苦耐劳的方式+良好的学习方法,很快把C++基础补充完毕,现在向中级难度的知识触发。

接口的东西,我已经整明白了,现在准备向容器和迭代器出发(先学习容器后学习迭代器)。(前后用来半天的时间,感谢具备良好方法的自己)。

二 、容器

参考:

https://www.cnblogs.com/xkfz007/articles/2534249.html

1、什么是容器?

        在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对 象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到。

      说白了,就是装东西的罐子。怎么网罐子里面存放、拿出、排序东西等等操作,就是容器的方法。

2、容器有什么特征?

容器大小可以自动扩展

支持标准模板库(STL )开发

3、容器的分类?

容器主要包含了顺序性容器、关联式容器和容器适配器三种。

顺序性容器——是一种线性表,其包含的容量器类为:

顺序性容器——是一种二叉树表,其包含的容量器类为:

容器适配器——不是一种表,我的理解是具备堆栈性的特殊容器。其包含的容量器类为:

关于容器的每个子类,不过多解释。因为没必要知道那么多子类的具体细节,我们只要用到什么时,就学什么即可。记住,我们不要为了学习而学习,我们不要学那些没用的东西(人力有穷,知识无限。若得方法,遇到难题,自会迎刃而解)。

三、顺序性容器 vector举例(用到了迭代器来遍历容器)。

主要参考:

https://www.cnblogs.com/cxq0017/p/6555533.html

https://www.cnblogs.com/yoke/p/6080080.html

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

int main()
{
	vector<int> iVec;
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //1个元素, 容器容量为1

	iVec.push_back(1);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //2个元素, 容器容量为2

	iVec.push_back(2222);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //3个元素, 容器容量为4

	iVec.push_back(3);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //4个元素, 容器容量为4

	iVec.push_back(4);
	iVec.push_back(55555);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //5个元素, 容器容量为8

	iVec.push_back(6);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //6个元素, 容器容量为8

	iVec.push_back(7);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //7个元素, 容器容量为8

	iVec.push_back(8);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //8个元素, 容器容量为8

	iVec.push_back(9);
	cout << "容器 大小为: " << iVec.size() << endl;
	cout << "容器 容量为: " << iVec.capacity() << endl; //9个元素, 容器容量为16
												   /* vs2005/8 容量增长不是翻倍的,如
												   9个元素   容量9
												   10个元素 容量13 */

												   /* 测试effective stl中的特殊的交换 swap() */
	cout << "当前vector 的大小为: " << iVec.size() << endl;
	cout << "当前vector 的容量为: " << iVec.capacity() << endl;
	vector<int>(iVec).swap(iVec);

	cout << "临时的vector<int>对象 的大小为: " << (vector<int>(iVec)).size() << endl;
	cout << "临时的vector<int>对象 的容量为: " << (vector<int>(iVec)).capacity() << endl;
	cout << "交换后,当前vector 的大小为: " << iVec.size() << endl;
	cout << "交换后,当前vector 的容量为: " << iVec.capacity() << endl;


	cout << endl;
	cout << endl;
	cout << endl;
	//下标法,输出容器的值
	int length = iVec.size();
	for (int i = 0; i<length; i++)
	{
		cout << iVec[i] << endl;
	}
	cout << endl << endl;
	//迭代器法,输出容器的值
	cout << "迭代器法" << endl;
	vector<int>::iterator iter = iVec.begin();
	for (; iter != iVec.end(); iter++)
	{
		cout << *iter << endl;
	}

	return 0;
}

运行结果:

 

四、总结

1、关于容器和迭代器,你不用过多得看其他博客,你看完我这个列子就可以了。

2、如果你要区分容器和迭代器在不同的场景的应用,请自己仔细百度分类。(但其实也很简单)

猜你喜欢

转载自blog.csdn.net/xpj8888/article/details/85282479