文章目录
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 &#