C++分析——容器STL

短命女 2022-06-06 05:52 356阅读 0赞

文章目录

    • vector测试类的初始化
    • vector测试类内容的显示,取出vector内容
    • list容器测试定义类:Module_list
    • list测试类的构造和析构函数
    • list测试类内容的显示,取出list内容
    • 搜索list容器内容
    • map测试类的初始化
    • 搜索map容器内容
    • 保存多个key的map:multimap

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

  1. typedef struct
  2. {
  3. char name[50];
  4. int number;
  5. }CAPP_info;

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

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

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

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

  1. cout << "vertor int number is " << m_vertor_int_info.size() << endl;
  2. cout << "vertor int empty is " << m_vertor_int_info.empty() << endl;
  3. for(int i = 0;i < 10;i++)
  4. {
  5. m_vertor_int_info.push_back(i);
  6. }
  7. cout << "vertor int number is " << m_vertor_int_info.size() << endl;
  8. cout << "vertor int empty is " << m_vertor_int_info.empty() << endl;

执行结果:

  1. $ ./project.o
  2. vertor int number is 0
  3. vertor int empty is 1
  4. vertor int number is 10
  5. 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():函数返回容器的尾部,不是最后一个的内容,迭代器的上一个才是容器最后一个的内容。

源码

  1. void Module_vector::Show_info(std::vector<int> &info)
  2. {
  3. std::vector<int>::iterator iter = info.begin();
  4. while(iter != info.end())
  5. {
  6. cout << "int vertor info is "<< *iter << endl;
  7. iter++;
  8. }
  9. iter = info.begin();
  10. cout << "int vertor begin info is "<< *iter << endl;
  11. iter = info.end();
  12. cout << "int vertor end info is "<< *iter << endl;
  13. iter = info.end();
  14. cout << "int vertor end-1 info is "<< *(iter-1) << endl;
  15. }

执行结果

  1. int vertor info is 10
  2. int vertor info is 15
  3. int vertor info is 20
  4. int vertor info is 25
  5. int vertor info is 30
  6. int vertor info is 35
  7. int vertor info is 40
  8. int vertor info is 45
  9. int vertor info is 50
  10. int vertor info is 55
  11. int vertor begin info is 10
  12. int vertor end info is 0
  13. int vertor end-1 info is 55

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

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

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

  1. class Module_vector : public CPP_Public
  2. {
  3. public:
  4. Module_vector();
  5. ~Module_vector();
  6. void Init();
  7. void Module_Func_Run();
  8. private:
  9. void Show_info(std::vector<int> &info);
  10. void Show_info(std::vector<std::string> &info);
  11. void Show_info(std::vector<CAPP_info> &info);
  12. private:
  13. std::vector<int> m_vertor_int_info;
  14. std::vector<std::string> m_vertor_string_info;
  15. std::vector<CAPP_info> m_vertor_struct_info;
  16. };

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

  1. Module_vector::Module_vector():
  2. {
  3. m_vertor_int_info.clear();
  4. m_vertor_string_info.clear();
  5. m_vertor_struct_info.clear();
  6. }
  7. Module_vector::~Module_vector()
  8. {
  9. m_vertor_int_info.clear();
  10. m_vertor_string_info.clear();
  11. m_vertor_struct_info.clear();
  12. }

vector测试类的初始化

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

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

  1. void Module_vector::Init()
  2. {
  3. for(int i = 0;i < 10;i++)
  4. {
  5. m_vertor_int_info.push_back(i*5);
  6. }
  7. m_vertor_string_info.push_back(string("Test vector 1"));
  8. m_vertor_string_info.push_back(string("Test vector 2"));
  9. m_vertor_string_info.push_back(string("Test vector 3"));
  10. CAPP_info Inptut_info;
  11. memset((void *)&Inptut_info,0,sizeof(CAPP_info));
  12. sprintf(Inptut_info.name,"%s","vector struct test 1");
  13. Inptut_info.number = 23;
  14. m_vertor_struct_info.push_back(Inptut_info);
  15. sprintf(Inptut_info.name,"%s","vector struct test 2");
  16. Inptut_info.number = 34;
  17. m_vertor_struct_info.push_back(Inptut_info);
  18. }

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

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

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

  1. std::vector<int> Value;
  2. Value.push_back(1);
  3. Value.push_back(3);
  4. Value.push_back(4);
  5. Value.push_back(6);
  6. std::vector<int> TestValue;
  7. TestValue.insert(TestValue.begin(),Value.begin()+1,Value.begin()+3);

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

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

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

  1. void Module_vector::Show_info(std::vector<int> &info)
  2. {
  3. #if LEN_NUM==1
  4. for(int i = 0;i < (int)info.size();i++)
  5. {
  6. cout << "LEN_NUM int vertor info is "<< info[i] << endl;
  7. }
  8. #else
  9. std::vector<int>::iterator iter = info.begin(); //定义迭代器
  10. while(iter != info.end())
  11. {
  12. cout << "int vertor info is "<< *iter << endl;
  13. iter++;
  14. }
  15. #endif
  16. }
  17. void Module_vector::Show_info(std::vector<std::string> &info)
  18. {
  19. #if LEN_NUM==1
  20. for(int i = 0;i < (int)info.size();i++)
  21. {
  22. cout << "LEN_NUM string vertor info is "<< info[i] << endl;
  23. }
  24. #else
  25. std::vector<std::string>::iterator iter = info.begin(); //定义迭代器
  26. while(iter != info.end())
  27. {
  28. cout << "int string vertor info is "<< *iter << endl;
  29. iter++;
  30. }
  31. #endif
  32. }
  33. void Module_vector::Show_info(std::vector<CAPP_info> &info)
  34. {
  35. #if LEN_NUM==1
  36. for(int i = 0;i < (int)info.size();i++)
  37. {
  38. cout << "LEN_NUM struct vertor info is "<< info[i].name;
  39. cout << " number is "<< info[i].number << endl;
  40. }
  41. #else
  42. std::vector<CAPP_info>::iterator iter = info.begin(); //定义迭代器
  43. while(iter != info.end())
  44. {
  45. cout << "struct vertor info is "<< iter->name;
  46. cout << " number is "<< iter->number << endl;
  47. iter++;
  48. }
  49. #endif
  50. }

运行代码

  1. void Module_vector::Module_Func_Run()
  2. {
  3. Show_info(m_vertor_int_info);
  4. Show_info(m_vertor_string_info);
  5. Show_info(m_vertor_struct_info);
  6. }

执行结果:
1、 使用下标访问容器

  1. $ ./project.o
  2. LEN_NUM int vertor info is 0
  3. LEN_NUM int vertor info is 5
  4. LEN_NUM int vertor info is 10
  5. LEN_NUM int vertor info is 15
  6. LEN_NUM int vertor info is 20
  7. LEN_NUM int vertor info is 25
  8. LEN_NUM int vertor info is 30
  9. LEN_NUM int vertor info is 35
  10. LEN_NUM int vertor info is 40
  11. LEN_NUM int vertor info is 45
  12. LEN_NUM string vertor info is Test vector 1
  13. LEN_NUM string vertor info is Test vector 2
  14. LEN_NUM string vertor info is Test vector 3
  15. LEN_NUM struct vertor info is vector struct test 1 number is 23
  16. LEN_NUM struct vertor info is vector struct test 2 number is 34

2、 使用迭代器访问容器

  1. $ ./project.o
  2. int vertor info is 0
  3. int vertor info is 5
  4. int vertor info is 10
  5. int vertor info is 15
  6. int vertor info is 20
  7. int vertor info is 25
  8. int vertor info is 30
  9. int vertor info is 35
  10. int vertor info is 40
  11. int vertor info is 45
  12. int string vertor info is Test vector 1
  13. int string vertor info is Test vector 2
  14. int string vertor info is Test vector 3
  15. struct vertor info is vector struct test 1 number is 23
  16. struct vertor info is vector struct test 2 number is 34

#list容器

list容器测试定义类:Module_list

头文件:#include

容器定义:std::vector vertor_info;

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

  1. class Module_list : public CPP_Public
  2. {
  3. public:
  4. Module_list();
  5. ~Module_list();
  6. void Init();
  7. void Module_Func_Run();
  8. void AddAndDelete();
  9. private:
  10. void Show_info(std::list<int> &info);
  11. void Show_info(std::list<std::string> &info);
  12. void Show_info(std::list<CAPP_info> &info);
  13. int Find_info(const int info);
  14. int Find_info(const std::string &info);
  15. int Find_info(CAPP_info &info);
  16. private:
  17. std::list<int> m_list_int_info;
  18. std::list<std::string> m_list_string_info;
  19. std::list<CAPP_info> m_list_struct_info;
  20. };

list测试类的构造和析构函数

在这个类中的构造和析构里面主要是为容器清零。

  1. Module_list::Module_list()
  2. {
  3. m_list_int_info.clear();
  4. m_list_string_info.clear();
  5. m_list_struct_info.clear();
  6. }
  7. Module_list::~Module_list()
  8. {
  9. m_list_int_info.clear();
  10. m_list_string_info.clear();
  11. m_list_struct_info.clear();
  12. }

##list测试类的初始化
分别对数字型、字符串型和数组型进行初始化。
使用push_back函数对vector容器内容进行填充。

  1. void Module_list::Init()
  2. {
  3. for(int i = 0;i < 10;i++)
  4. {
  5. m_list_int_info.push_back((i+3)*8);
  6. }
  7. m_list_string_info.push_back(string("Test list 1"));
  8. m_list_string_info.push_back(string("Test list 2"));
  9. m_list_string_info.push_back(string("Test list 3"));
  10. CAPP_info Inptut_info;
  11. memset((void *)&Inptut_info,0,sizeof(CAPP_info));
  12. for(int i = 0;i < 4;i++)
  13. {
  14. sprintf(Inptut_info.name,"list struct test %d",i);
  15. Inptut_info.number = i+3;
  16. m_list_struct_info.push_back(Inptut_info);
  17. }
  18. }

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

取出list容器里面的内容,可以使用下标访问法,也可以使用迭代器去访问。以后只使用迭代器访问。

源码:

  1. void Module_list::Show_info(std::list<int> &info)
  2. {
  3. std::list<int>::iterator iter = info.begin();
  4. while(iter != info.end())
  5. {
  6. cout << "int vertor info is "<< *iter << endl;
  7. iter++;
  8. }
  9. }
  10. void Module_list::Show_info(std::list<std::string> &info)
  11. {
  12. std::list<std::string>::iterator iter = info.begin();
  13. while(iter != info.end())
  14. {
  15. cout << "int vertor info is "<< *iter << endl;
  16. iter++;
  17. }
  18. }
  19. void Module_list::Show_info(std::list<CAPP_info> &info)
  20. {
  21. std::list<CAPP_info>::iterator iter = info.begin();
  22. while(iter != info.end())
  23. {
  24. cout << "int vertor info is "<< iter->name;
  25. cout << " number is "<< iter->number << endl;
  26. iter++;
  27. }
  28. }

运行代码:

  1. void Module_list::Module_Func_Run()
  2. {
  3. Show_info(m_list_int_info);
  4. Show_info(m_list_string_info);
  5. Show_info(m_list_struct_info);
  6. }

执行结果:

  1. $ ./project.o
  2. int vertor info is 24
  3. int vertor info is 32
  4. int vertor info is 40
  5. int vertor info is 48
  6. int vertor info is 56
  7. int vertor info is 64
  8. int vertor info is 72
  9. int vertor info is 80
  10. int vertor info is 88
  11. int vertor info is 96
  12. int vertor info is Test list 1
  13. int vertor info is Test list 2
  14. int vertor info is Test list 3
  15. int vertor info is list struct test 0 number is 3
  16. int vertor info is list struct test 1 number is 4
  17. int vertor info is list struct test 2 number is 5
  18. int vertor info is list struct test 3 number is 6

搜索list容器内容

该方法也可以使用在vector容器上

源码:

  1. int Module_list::Find_info(const int info)
  2. {
  3. std::list<int>::iterator iter = m_list_int_info.begin();
  4. while(iter != m_list_int_info.end())
  5. {
  6. if(info == *iter)
  7. {
  8. cout << "Find the int info is " << info <<endl;
  9. return TYPE_YES;
  10. }
  11. iter++;
  12. }
  13. cout << "Not find the int info." <<endl;
  14. return TYPE_NO;
  15. }
  16. int Module_list::Find_info(const std::string &info)
  17. {
  18. std::list<std::string>::iterator iter = m_list_string_info.begin();
  19. while(iter != m_list_string_info.end())
  20. {
  21. if(info == *iter)
  22. {
  23. cout << "Find the string info is " << info <<endl;
  24. return TYPE_YES;
  25. }
  26. iter++;
  27. }
  28. cout << "Not find the string info." <<endl;
  29. return TYPE_NO;
  30. }
  31. int Module_list::Find_info(CAPP_info &info)
  32. {
  33. std::list<CAPP_info>::iterator iter = m_list_struct_info.begin();
  34. while(iter != m_list_struct_info.end())
  35. {
  36. if(!strcmp(info.name,iter->name))
  37. {
  38. cout << "Find the struct info name is " << iter->name << endl;
  39. cout << "the struct info number is " << iter->number << endl;
  40. return TYPE_YES;
  41. }
  42. iter++;
  43. }
  44. cout << "Not find the struct info." <<endl;
  45. return TYPE_NO;
  46. }

运行代码:

  1. void Module_list::Module_Func_Run()
  2. {
  3. (void)Find_info((4+3)*8);
  4. (void)Find_info(45);
  5. (void)Find_info(string("Test list 1"));
  6. (void)Find_info(string("Test list 1 and 2"));
  7. CAPP_info Test = {0};
  8. sprintf(Test.name,"list struct test 2");
  9. Test.number = 23;
  10. (void)Find_info(Test);
  11. sprintf(Test.name,"list struct test 34");
  12. Test.number = 57;
  13. (void)Find_info(Test);
  14. }

执行结果

  1. Find the int info is 56
  2. Not find the int info.
  3. Find the string info is Test list 1
  4. Not find the string info.
  5. Find the struct info name is list struct test 2
  6. the struct info number is 5
  7. Not find the struct info.

#map容器
##map容器测试类定义:Module_map

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

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

  1. class Module_map : public CPP_Public
  2. {
  3. public:
  4. Module_map();
  5. ~Module_map();
  6. void Init();
  7. void Module_Func_Run();
  8. private:
  9. void Show_info(std::map<int,int> &info);
  10. void Show_info(std::map<int,std::string> &info);
  11. void Show_info(std::map<const char *,CAPP_info> &info);
  12. int Find_info(const int info);
  13. int Find_info(const char *pinfo);
  14. private:
  15. std::map<int,int> m_map_int_info;
  16. std::map<int,std::string> m_map_string_info;
  17. std::map<const char *,CAPP_info> m_map_struct_info;
  18. };

##map测试类的构造和析构函数
构造和析构函数初始化成员函数。

  1. Module_map::Module_map()
  2. {
  3. m_map_int_info.clear();
  4. m_map_string_info.clear();
  5. m_map_struct_info.clear();
  6. }
  7. Module_map::~Module_map()
  8. {
  9. m_map_int_info.clear();
  10. m_map_string_info.clear();
  11. m_map_struct_info.clear();
  12. }

map测试类的初始化

map的初始化一般有三种:
1、 直接初访问下标初始化
2、 通过map::value_type进行初始化
3、 通过std::pair进行初始化

  1. void Module_map::Init()
  2. {
  3. int i = 0;
  4. CAPP_info Input_info = {0};
  5. for(i = 0;i < 10;i++)
  6. {
  7. m_map_int_info[i] = (i+3)*6;
  8. }
  9. cout << "map int number is " <<m_map_int_info.size() << endl;
  10. m_map_string_info.insert(pair<int,string>(0, string("Test map string 1")));
  11. m_map_string_info.insert(pair<int,string>(1, string("Test map string 2")));
  12. m_map_string_info.insert(pair<int,string>(1, string("Test map string 2"))); //相同的key,不同的value
  13. m_map_string_info.insert(pair<int,string>(2, string("Test map string 3")));
  14. m_map_string_info.insert(pair<int,string>(2, string("Test map string 4")));
  15. m_map_string_info.insert(pair<int,string>(3, string("Test map string 4")));
  16. m_map_string_info.insert(pair<int,string>(5, string("Test map string 4"))); //不同的key,相同的value
  17. cout << "map string number is " <<m_map_string_info.size() << endl;
  18. sprintf(Input_info.name,"list struct test 1");
  19. Input_info.number = 3;
  20. m_map_struct_info.insert(map<const char *,CAPP_info>::value_type ("Test map struct 1",Input_info));
  21. sprintf(Input_info.name,"list struct test 2");
  22. Input_info.number = 5;
  23. m_map_struct_info.insert(map<const char *,CAPP_info>::value_type ("Test map struct 2",Input_info));
  24. std::pair<const char *,CAPP_info> Info;
  25. sprintf(Input_info.name,"list struct test 3");
  26. Input_info.number = 8;
  27. Info.first = "Test map struct 3";
  28. Info.second = Input_info;
  29. m_map_struct_info.insert(Info);
  30. cout << "map struct number is " <<m_map_struct_info.size() << endl;
  31. }

执行结果:

  1. $ ./project.o
  2. map int number is 10
  3. map string number is 5
  4. map struct number is 3
  5. $

##map测试类内容的显示,取出map内容
通过对类成员的迭代子来访问map中的内容。

  1. void Module_map::Show_info(std::map<int,int> &info)
  2. {
  3. std::map<int,int>::iterator iter = info.begin();
  4. while(iter != info.end())
  5. {
  6. cout << "int map info first is " << iter->first <<endl;
  7. cout << "int map info second is " <<iter->second <<endl;
  8. iter++;
  9. }
  10. }
  11. void Module_map::Show_info(std::map<int,std::string> &info)
  12. {
  13. std::map<int,std::string>::iterator iter = info.begin();
  14. while(iter != info.end())
  15. {
  16. cout << "string map info first is " << iter->first <<endl;
  17. cout << "string map info second is " <<iter->second <<endl;
  18. iter++;
  19. }
  20. }
  21. void Module_map::Show_info(std::map<const char *,CAPP_info> &info)
  22. {
  23. std::map<const char *,CAPP_info>::iterator iter = info.begin();
  24. CAPP_info Output_info = {0};
  25. while(iter != info.end())
  26. {
  27. Output_info = (CAPP_info)iter->second;
  28. cout << "struct map info first is " << iter->first <<endl;
  29. cout << "struct map info second name is " <<Output_info.name <<endl;
  30. cout << "struct map info second number is " <<Output_info.number <<endl;
  31. iter++;
  32. }
  33. }

执行结果:

  1. $ ./project.o
  2. int map info first is 0
  3. int map info second is 18
  4. int map info first is 1
  5. int map info second is 24
  6. int map info first is 2
  7. int map info second is 30
  8. int map info first is 3
  9. int map info second is 36
  10. int map info first is 4
  11. int map info second is 42
  12. int map info first is 5
  13. int map info second is 48
  14. int map info first is 6
  15. int map info second is 54
  16. int map info first is 7
  17. int map info second is 60
  18. int map info first is 8
  19. int map info second is 66
  20. int map info first is 9
  21. int map info second is 72
  22. string map info first is 0
  23. string map info second is Test map string 1
  24. string map info first is 1
  25. string map info second is Test map string 2
  26. string map info first is 2
  27. string map info second is Test map string 3
  28. string map info first is 3
  29. string map info second is Test map string 4
  30. string map info first is 5
  31. string map info second is Test map string 4
  32. struct map info first is Test map struct 1
  33. struct map info second name is list struct test 1
  34. struct map info second number is 3
  35. struct map info first is Test map struct 2
  36. struct map info second name is list struct test 2
  37. struct map info second number is 5
  38. struct map info first is Test map struct 3
  39. struct map info second name is list struct test 3
  40. struct map info second number is 8
  41. $

可以看出,相同的key只会保留最先注册的那一个,但相同的value不同的key可以并存。

搜索map容器内容

搜索容器map的内容是通过find(key)函数进行搜索的,通过传入key值,进行搜索容器内的value值。

  1. int Module_map::Find_info(const int info)
  2. {
  3. std::map<int,std::string>::iterator iter = m_map_string_info.find(info);
  4. if(iter != m_map_string_info.end())
  5. {
  6. cout << "string map info find,string is " << iter->second << endl;
  7. return TYPE_YES;
  8. }
  9. else
  10. {
  11. cout << "string map info not find." << endl;
  12. return TYPE_NO;
  13. }
  14. }
  15. int Module_map::Find_info(const char *pinfo)
  16. {
  17. std::map<const char *,CAPP_info>::iterator iter = m_map_struct_info.find(pinfo);
  18. if(iter != m_map_struct_info.end())
  19. {
  20. cout << "struct map info find,name is " << iter->second.name << endl;
  21. cout << "struct map info find,number is " << iter->second.number << endl;
  22. return TYPE_YES;
  23. }
  24. else
  25. {
  26. cout << "string map info not find." << endl;
  27. return TYPE_NO;
  28. }
  29. }

运行代码

  1. Find_info(3);
  2. Find_info("Test map struct 3");

执行结果

  1. $ ./project.o
  2. string map info find,string is Test map string 4
  3. struct map info find,name is list struct test 3
  4. struct map info find,number is 8
  5. $

保存多个key的map:multimap

定义一个multimap,能够保存多个key值

  1. std::multimap<int, std::string> m_multimap_string_info;

初始化

  1. m_multimap_string_info.insert(pair<int, string>(2, string("Test multimap string 2.1")));
  2. m_multimap_string_info.insert(pair<int, string>(2, string("Test multimap string 2.2")));
  3. m_multimap_string_info.insert(pair<int, string>(2, string("Test multimap string 2.3")));
  4. m_multimap_string_info.insert(pair<int, string>(3, string("Test multimap string 3")));
  5. m_multimap_string_info.insert(pair<int, string>(5, string("Test multimap string 5")));
  6. cout << "multimap number is " << m_map_struct_info.size() << endl;
  7. cout << "multimap key 2 number is " << m_multimap_string_info.count(2) << endl;
  8. cout << "multimap key 3 number is " << m_multimap_string_info.count(3) << endl;
  9. cout << "multimap key 4 number is " << m_multimap_string_info.count(4) << endl;

执行结果

  1. multimap number is 3 //相同的key只统计一遍
  2. multimap key 2 number is 3
  3. multimap key 3 number is 1
  4. multimap key 4 number is 0

遍历

  1. void Module_map::Show_info(const std::multimap<int, std::string> &info) const
  2. {
  3. std::multimap<int, std::string>::const_iterator iter = info.begin();
  4. while (iter != info.end()) {
  5. std::multimap<int, std::string>::const_iterator keyBegin = info.lower_bound(iter->first);
  6. cout << "multimap key " << iter->first << "number is " << info.count(iter->first) << endl;
  7. while (keyBegin != info.upper_bound(iter->first)) {
  8. cout << "multimap first is " << keyBegin->first;
  9. cout << " second is " << keyBegin->second << endl;
  10. keyBegin++;
  11. }
  12. iter = keyBegin;
  13. }
  14. }

执行结果

  1. multimap key 2number is 3
  2. multimap first is 2 second is Test multimap string 2.1
  3. multimap first is 2 second is Test multimap string 2.2
  4. multimap first is 2 second is Test multimap string 2.3
  5. multimap key 3number is 1
  6. multimap first is 3 second is Test multimap string 3
  7. multimap key 5number is 1
  8. multimap first is 5 second is Test multimap string 5

#string容器
##string容器初始化方法

string容器的初始化方法有很多,但大多数用到的就为以下几个

  1. string string_info = string("Test string");
  2. cout << "string name is " << string_info << endl;
  3. cout << "string size is " << string_info.size() << endl; //得到string容器字符串的大小
  4. cout << "string length is " << string_info.length() << endl; //得到string容器字符串的长度
  5. string str1 = "Test string 1";
  6. string str2 = string(str1,6); //从字符串str1下标6开始初始化,str1 = "tring 1"
  7. string str3 = string(6,'v'); //初始化6个字符'v',str3 = "vvvvvv"
  8. string str4 = string_info + ' ' + str1; //字符串相加 str4 = "Test string Test string 1"
  9. string str5 = string("numbertest",2,5); //从字符串下标2开始,往后初始化5个字符 str5 = "mbert"
  10. cout << "str1 is " << str1 << endl;
  11. cout << "str2 is " << str2 << endl;
  12. cout << "str3 is " << str3 << endl;
  13. cout << "str4 is " << str4 << endl;
  14. cout << "str5 is " << str5 << endl;

执行结果:

  1. $ ./project.o
  2. string name is Test string
  3. string size is 11
  4. string length is 11
  5. str1 is Test string 1
  6. str2 is tring 1
  7. str3 is vvvvvv
  8. str4 is Test string Test string 1
  9. str5 is mbert
  10. $

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C/C++编程:STL容器

    容器 有三类容器——顺序容器、关联容器和无序关联容器——每种都被设计为支持不同组的操作。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_s

    相关 c++ 容器STL

    STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的