C++分析——容器STL


C++使用容器可以极大的方便对数据的操作,将数据排布储存,然后使用的时候再调用。
容器测试的结构体

typedef struct
{
		char 	name[50];
		int	number;
}CAPP_info;

#容器通用函数
在不同的容器中,这些函数是通用的,以vector容器为例。
std::vector Test_STL_info;

##判断容器是否为空:Test_STL_info .empty()
返回值:若容器为空,返回1,非空返回0。

##计算容器个数:Test_STL_info .size()
返回值:返回容器内容的实际个数,若为空,返回0。

结合判断容器是否为空,测试代码

	cout << "vertor int number is " << m_vertor_int_info.size() << endl;
	cout << "vertor int empty is " << m_vertor_int_info.empty() << endl;
	
	for(int i = 0;i < 10;i++)
	{
		m_vertor_int_info.push_back(i);
	}

	cout << "vertor int number is " << m_vertor_int_info.size() << endl;
	cout << "vertor int empty is " << m_vertor_int_info.empty() << endl;

执行结果:

$ ./project.o 
vertor int number is 0
vertor int empty is 1
vertor int number is 10
vertor int empty is 0

##清空容器内容:Test_STL_info .clear()
该函数会将容器的内容清空。

##获得容器的首尾内容:Test_STL_info .begin()、Test_STL_info .end()
Test_STL_info .begin():函数返回的是容器第一个的内容。
Test_STL_info .end():函数返回容器的尾部,不是最后一个的内容,迭代器的上一个才是容器最后一个的内容。

源码

void Module_vector::Show_info(std::vector<int> &info)
{
std::vector<int>::iterator iter = info.begin();

	while(iter != info.end())
	{
		cout << "int vertor info is "<< *iter << endl;
		iter++;
	}

	iter = info.begin();
	cout << "int vertor begin info is "<< *iter << endl;

	iter = info.end();
	cout << "int vertor end info is "<< *iter << endl;

	iter = info.end();
	cout << "int vertor end-1 info is "<< *(iter-1) << endl;
}

执行结果

int vertor info is 10
int vertor info is 15
int vertor info is 20
int vertor info is 25
int vertor info is 30
int vertor info is 35
int vertor info is 40
int vertor info is 45
int vertor info is 50
int vertor info is 55
int vertor begin info is 10
int vertor end info is 0
int vertor end-1 info is 55

#vector容器
头文件:#include
容器定义:std::vector vertor_info;

其中int为容器里面所存储的类型,可以是指针和结构体。

##vector容器测试定义类:Module_vector

class Module_vector : public CPP_Public
{
public:
	Module_vector();
	~Module_vector();
	void Init();
	void Module_Func_Run();

private:
	void Show_info(std::vector<int> &info);
	void Show_info(std::vector<std::string> &info);
	void Show_info(std::vector<CAPP_info> &info);

private:
	std::vector<int> 			m_vertor_int_info;
	std::vector<std::string> 	m_vertor_string_info;
	std::vector<CAPP_info> 	m_vertor_struct_info;

};

##vector测试类的构造和析构函数

Module_vector::Module_vector():
{
		m_vertor_int_info.clear();
		m_vertor_string_info.clear();
		m_vertor_struct_info.clear();
}

Module_vector::~Module_vector()
{
		m_vertor_int_info.clear();
		m_vertor_string_info.clear();
		m_vertor_struct_info.clear();
}

vector测试类的初始化

分别对数字型、字符串型和数组型进行初始化。

1、使用push_back函数对vector容器内容进行填充,此处分别填充int,string和结构体类型。

void Module_vector::Init()
{
	for(int i = 0;i < 10;i++)
	{
		m_vertor_int_info.push_back(i*5);
	}

	m_vertor_string_info.push_back(string("Test vector 1"));
	m_vertor_string_info.push_back(string("Test vector 2"));
	m_vertor_string_info.push_back(string("Test vector 3"));

	CAPP_info Inptut_info;
	memset((void *)&Inptut_info,0,sizeof(CAPP_info));

	sprintf(Inptut_info.name,"%s","vector struct test 1");
	Inptut_info.number = 23;
	m_vertor_struct_info.push_back(Inptut_info);

	sprintf(Inptut_info.name,"%s","vector struct test 2");
	Inptut_info.number = 34;
	m_vertor_struct_info.push_back(Inptut_info);

}

2、复制其他容器进行初始化

	std::vector<int> Value;
	Value.push_back(1);
	Value.push_back(3);
	Value.push_back(4);
	Value.push_back(6);

	std::vector<int> TestValue = Value;

3、截取其他容器的一段来初始化

	std::vector<int> Value;
	Value.push_back(1);
	Value.push_back(3);
	Value.push_back(4);
	Value.push_back(6);

	std::vector<int> TestValue;
	TestValue.insert(TestValue.begin(),Value.begin()+1,Value.begin()+3);

vector测试类内容的显示,取出vector内容

取出vector容器里面的内容,可以使用下标访问法,也可以使用迭代器去访问。
宏定义:#defien LEN_NUM 1 //使用容器下标访问

源码:源码对容器内容显示使用的C++函数重载的方法。

void Module_vector::Show_info(std::vector<int> &info)
{
#if LEN_NUM==1
	for(int i = 0;i < (int)info.size();i++)
	{
		cout << "LEN_NUM int vertor info is "<< info[i] << endl;
	}

#else
	std::vector<int>::iterator iter = info.begin();		//定义迭代器

	while(iter != info.end())
	{
		cout << "int vertor info is "<< *iter << endl;
		iter++;
	}
#endif
}

void Module_vector::Show_info(std::vector<std::string> &info)
{
#if LEN_NUM==1
	for(int i = 0;i < (int)info.size();i++)
	{
		cout << "LEN_NUM string vertor info is "<< info[i] << endl;
	}

#else

	std::vector<std::string>::iterator iter = info.begin();		//定义迭代器


	while(iter != info.end())
	{
		cout << "int string vertor info is "<< *iter << endl;
		iter++;
	}
#endif	
}

void Module_vector::Show_info(std::vector<CAPP_info> &info)
{
#if LEN_NUM==1
	for(int i = 0;i < (int)info.size();i++)
	{
		cout << "LEN_NUM struct vertor info is "<< info[i].name;
		cout << " number is "<< info[i].number << endl;
	}

#else
	std::vector<CAPP_info>::iterator iter &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值