C++标准模版库之vector容器怎么使用

其他教程   发布日期:2024年04月19日   浏览次数:297

今天小编给大家分享一下C++标准模版库之vector容器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    vector容器介绍

    容器顾名思义就是存放数据的东西,和我们的水桶用于装水是一个原理。vector的功能和水桶一样,就是用来装东西的,我们的水桶可以用于装水,也可以用来装米饭,稻子,汽油等。我们的容器也是可以装各种数据,基本类型的数据,自定义的数据类型,并且vector还提供了迭代器来很方便的访问这些数据,下面就让我们一起看下如何使用C++的vector

    vector 的使用

    在我们使用vector之前,我们要先引入vector的头文件,就和我们使用Java的类要先import对应的包一样

    1. #include<vector>

    1. vector存放内置数据类型数据

    vector 存放内置数据类型数据其实就是存放基本数据类型的数据,如int,float,double,string 等,接下来请看存放内置数据类型数据的方法:

    创建vector并插入数据

    创建vector并且插入数据:

    1. // 创建了一个vector 容器,数组
    2. vector<int> v;
    3. // 向容器中插入数据
    4. v.push_back(10);
    5. v.push_back(20);
    6. v.push_back(30);
    7. v.push_back(40);

    遍历vector

    遍历vector主要是依靠vector的begin()和end()方法,begin()方法代表是vector的开始,end代表的是vector的结束,遍历vector有三种方式

    方式1:使用While循环的方式:

    1. // 起始迭代器,指向容器中第一个元素
    2. vector<int>::iterator itBegin = v.begin();
    3. // 结束迭代器
    4. vector<int>::iterator itEnd = v.end();
    5. while(itBegin != itEnd){
    6. cout<<*itBegin<<endl;
    7. tBegin++;
    8. }

    方式2:使用for循环

    1. for(vector<int>::iterator it = v.begin();it !=v.end(); it++){
    2. cout<< *it << endl;
    3. }

    方式3:利用STL提供的遍历算法 首先我们提供一个打印的函数,

    1. void myPrint(int val){
    2. cout << val << endl;
    3. }

    然后把函数名传递到for_each()函数中,如下所示:

    1. // 第三种方式,利用STL提供的遍历算法
    2. for_each(v.begin(),v.end(),myPrint);

    2.vector存放自定义数据类型

    vector 也可以存放自定义的类型,例如我们自定义了一个Person类:

    1. class Person
    2. {
    3. public:
    4. Person(string name,int age)
    5. {
    6. this->mName = name;
    7. this->mAge = age;
    8. }
    9. string mName;
    10. int mAge;
    11. };

    然后创建vector并添加Person类型的数据

    1. vector<Person> v;
    2. Person p1("aa",10);
    3. Person p2("bb",20);
    4. Person p3("cc",30);
    5. Person p4("dd",40);
    6. // 添加数据
    7. v.push_back(p1);
    8. v.push_back(p2);
    9. v.push_back(p3);
    10. v.push_back(p4);

    遍历数据的时候我们需要注意的是我们拿到的元素是Person引用,如下面代码中的it,代表的是Person的引用,我们解引用后得到的是Person,如果要访问姓名可以使用(*it).mName,或者是it->mName来访问

    1. // 遍历数据
    2. for(vector<Person>::iterator it = v.begin();
    3. it != v.end();it ++){
    4. //cout<<"姓名: " << (*it).mName <<
    5. // " ,age:" << (*it).mAge << endl;
    6. cout<<"姓名: " << it->mName <<
    7. " ,age:" << it->mAge << endl;
    8. }

    所有测试代码

    1. #include<iostream>
    2. #include<vector>
    3. #include<string>
    4. using namespace std;
    5. void myPrint(int val){
    6. cout << val << endl;
    7. }
    8. void test01()
    9. {
    10. // 创建了一个vector 容器,数组
    11. vector<int> v;
    12. // 向容器中插入数据
    13. v.push_back(10);
    14. v.push_back(20);
    15. v.push_back(30);
    16. v.push_back(40);
    17. // // 通过迭代去访问容器中的数据
    18. // vector<int>::iterator itBegin
    19. // = v.begin();//起始迭代器,指向容器中第一个元素
    20. // vector<int>::iterator itEnd = v.end();//结束迭代器
    21. // // 第一种遍历方式
    22. // while(itBegin != itEnd){
    23. // cout<<*itBegin<<endl;
    24. // itBegin++;
    25. // }
    26. // 第二种遍历方式
    27. for(vector<int>::iterator it = v.begin();
    28. it !=v.end(); it++){
    29. cout<< *it << endl;
    30. }
    31. // 第三种方式,利用STL提供的遍历算法
    32. for_each(v.begin(),v.end(),myPrint);
    33. }
    34. // vector 存放自定义类型
    35. class Person
    36. {
    37. public:
    38. Person(string name,int age)
    39. {
    40. this->mName = name;
    41. this->mAge = age;
    42. }
    43. string mName;
    44. int mAge;
    45. };
    46. void test02(){
    47. vector<Person> v;
    48. Person p1("aa",10);
    49. Person p2("bb",20);
    50. Person p3("cc",30);
    51. Person p4("dd",40);
    52. // 添加数据
    53. v.push_back(p1);
    54. v.push_back(p2);
    55. v.push_back(p3);
    56. v.push_back(p4);
    57. // 遍历数据
    58. for(vector<Person>::iterator it = v.begin();
    59. it != v.end();it ++){
    60. //cout<<"姓名: " << (*it).mName <<
    61. // " ,age:" << (*it).mAge << endl;
    62. cout<<"姓名: " << it->mName <<
    63. " ,age:" << it->mAge << endl;
    64. }
    65. }
    66. // 存放自定义数据类型 指针
    67. void test03()
    68. {
    69. vector<Person*> v;
    70. Person p1("aa",10);
    71. Person p2("bb",20);
    72. Person p3("cc",30);
    73. Person p4("dd",40);
    74. // 添加数据
    75. v.push_back(&p1);
    76. v.push_back(&p2);
    77. v.push_back(&p3);
    78. v.push_back(&p4);
    79. // 遍历数据
    80. for(vector<Person *>::iterator it = v.begin();
    81. it != v.end();it ++){
    82. cout<<"::姓名: " << (*it)->mName <<
    83. " ,::age:" << (*it)->mAge << endl;
    84. }
    85. }
    86. int main()
    87. {
    88. test03();
    89. return 0;
    90. }

    3.vector 容器嵌套容器

    容器嵌套容器意思就是在vector中存放vector,把vector作为vector的元素存放起来,我们一起来看下具体怎么做 首先我们创建一个vector容器,用于存放vector类型的数据

    1. vector< vector<int> > v;

    然后我们创建4个小容器,这四个小容器作为我们开头创建的大容器的元素,并为每个小容器存放一些值用于测试

    1. // 创建小容器
    2. vector<int> v1;
    3. vector<int> v2;
    4. vector<int> v3;
    5. vector<int> v4;
    6. // 向小容器中添加数据
    7. for(int i = 0;i<4;i++){
    8. v1.push_back(i+1);
    9. v2.push_back(i+2);
    10. v3.push_back(i+3);
    11. v4.push_back(i+4);
    12. }

    然后我们将小容器存放到大容器里面

    1. // 将小容器插入到大容器
    2. v.push_back(v1);
    3. v.push_back(v2);
    4. v.push_back(v3);
    5. v.push_back(v4);

    最后是遍历容器,第一次拿到的it是一个容器,还需要遍历it,然后才是值,所以需要使用两个for循环

    1. for(vector< vector<int> >:: iterator it
    2. = v.begin(); it != v.end();it ++){
    3. // (*it) 是一个容器
    4. for(vector<int>::iterator vit
    5. = (*it).begin();vit != (*it).end();vit ++){
    6. cout<< *vit << " ";
    7. }
    8. cout<< endl;
    9. }

    通过大容器把所有数据遍历一遍,我们看遍历得到每一个元素的类型可以参考<>里面的类型,<>中是啥(*it)就是啥,如果是vector<int> 那么拿到的(*it)就是整型数据,如果是vector<vector<int>> 拿到的就是整型类型的容器

    以上就是C++标准模版库之vector容器怎么使用的详细内容,更多关于C++标准模版库之vector容器怎么使用的资料请关注九品源码其它相关文章!