C++ STL vector

STL中最常用的容器为 Vector  (可理解为数组)

容器:     vector

算法:     for_each

迭代器:  vector<int>::iterator  

复制代码
//创建了一个vector容器 数组
vector<int> v;
//向容器中插入数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//通过迭代器访问容器中的数据
vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器中第一个元素
vector<int>::iterator itEnd = v.end();//结束迭代器 指向容器中最后一个元素的下一个位置
复制代码

第一种遍历方式:

1 vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器中第一个元素
2 vector<int>::iterator itEnd = v.end();//结束迭代器 指向容器中最后一个元素的下一个位置
3 //第一种遍历方式
4 while (itBegin != itEnd)
5 {
6     cout << *itBegin << endl;//解引用   迭代器作用类似指针
7     itBegin++;
8 }

第二种遍历方式:

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

第三章遍历方式:

#include<algorithm>//标准算法头文件  数据整型 myPrint函数传入整型

void myPrint(int val)
{
    cout << val << endl;
}
//第三种遍历方式 利用STL提供遍历算法
for_each(v.begin(), v.end(), myPrint);

全部代码:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 #include<vector>
 4 #include<algorithm>//标准算法头文件
 5 //vector容器存放内置数据类型
 6 
 7 void myPrint(int val)
 8 {
 9     cout << val << endl;
10 }
11 void test()
12 {
13     //创建了一个vector容器 数组
14     vector<int> v;
15     //向容器中插入数据
16     v.push_back(10);
17     v.push_back(20);
18     v.push_back(30);
19     v.push_back(40);
20     //通过迭代器访问容器中的数据
21     ////第一种遍历方式
22     //vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器中第一个元素
23     //vector<int>::iterator itEnd = v.end();//结束迭代器 指向容器中最后一个元素的下一个位置
24     //while (itBegin != itEnd)
25     //{
26     //    cout << *itBegin << endl;//解引用   迭代器作用类似指针
27     //    itBegin++;
28     //}
29     //第二种遍历方式
30     //for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
31     //{
32     //    cout << *it << endl;
33     //}
34     //第三种遍历方式 利用STL提供遍历算法
35     for_each(v.begin(), v.end(), myPrint);
36 }
37 int main()
38 {
39     test();
40     system("pause");
41     return 0;
42 }
复制代码

容器嵌套容器

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 #include<vector>//使用vector容器  vector:向量
 4 void test()
 5 {
 6     vector<vector<int>>v;//创建二维容器
 7     //创建小容器:一维容器
 8     vector<int>v1;
 9     vector<int>v2;
10     vector<int>v3;
11     vector<int>v4;
12     //向小容器中添加数据
13     for (int i = 0; i < 4; i++)
14     {
15         v1.push_back(i + 1);  //  1 2 3 4
16         v2.push_back(i + 2);  //  2 3 4 5 
17         v3.push_back(i + 3);  //  3 4 5 6  
18         v4.push_back(i + 4);  //  4 5 6 7 
19     }
20     //将小容器放入大容器中
21     v.push_back(v1);
22     v.push_back(v2);
23     v.push_back(v3);
24     v.push_back(v4);
25     //遍历全部内容
26     for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
27     {
28         //(*it) = vector<int> 
29         for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
30         {
31             cout << *vit << "  ";
32         }
33         cout << endl;
34     }
35 }
36 
37 int main()
38 {
39     test();
40     system("pause");
41     return 0;
42 }
复制代码

Vector容器中存放自定义数据类型  

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 #include<vector>//使用vector容器  vector:向量
 4 //vector容器中存放自定义数据类型
 5 class Person
 6 {
 7 public:
 8     Person(string name, int age)
 9     {
10         this->m_Age = age;
11         this->m_Name = name;
12     }
13     string m_Name;
14     int m_Age;
15 };
16 void test()
17 {
18     vector<Person> v;
19     Person p1("aaa", 10);
20     Person p2("bbb", 20);
21     Person p3("ccc", 30);
22     //向容器中添加数据
23     v.push_back(p1);
24     v.push_back(p2);
25     v.push_back(p3);
26     //遍历容器中的数据
27     for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
28     {
29         //   *it 为 <Person>  尖括号内的数据类型 因此 需要 .指向 姓名 or 年龄
30         cout << "姓名:" << (*it).m_Name << "年龄:" << (*it).m_Age << endl;
31         cout << "姓名:" << it->m_Name << "年龄:" << it->m_Age << endl;//同等结果
32     }
33 }
34 void test2()
35 {
36     vector<Person*> v;// 存放自定义数据类型  指针
37     Person p1("aaa", 10);//地址
38     Person p2("bbb", 20);//地址
39     Person p3("ccc", 30);//地址
40     //向容器中添加数据
41     v.push_back(&p1);//尾插法
42     v.push_back(&p2);
43     v.push_back(&p3);
44     //遍历容器
45     for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
46     {
47         cout << "::姓名:" << (*it)->m_Name << "::年龄" << (*it)->m_Age << endl;
48     }
49 }
50 int main()
51 {
52     //test();
53     test2();
54     system("pause");
55     return 0;
56 }
复制代码

posted on   廿陆  阅读(11)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示