#include <iostream>
#include <string>
using namespace std;
#include <vector> // 容器 vector
#include <algorithm> // 使用系统算法的头文件
// 迭代器 遍历功能 用指针理解;
// 普通指针也算一种迭代器;
void test01() {
int array[5] = { 1, 3, 5, 6, 8 };
int* p = array; // 指针指向数组的首地址;
for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
cout << array[i] << endl;
}
for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
cout << *(p++) << endl;
}
}
void myPrint(int value) {
cout << value << endl;
}
void test02() {
vector<int> v; // 声明一个容器, 这个容器中存放int 类型数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
// 遍历容器中的数据;
// 第一种遍历方法: 利用迭代器;
vector<int>::iterator itBegin = v.begin(); // itBegin 指向容器的起始位置;
vector<int>::iterator itEnd = v.end(); // itEnd 指向容器的最后一个位置的下一个地址;
while (itBegin != itEnd)
{
cout << *itBegin << endl;
itBegin++;
}
// 第二种遍历方法
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
// 第三种方式 利用算法
for_each(v.begin(), v.end(), myPrint);
}
class Person {
public:
Person(string name, int age) {
this->name = name;
this->age = age;
}
void showInfo() {
cout << "name: " << this->name << " age: " << this->age << endl;
}
private:
string name;
int age;
};
// 利用迭代器遍历
void test03() {
vector<Person> v;
Person person1("roger", 19);
Person person2("rei ri", 20);
Person person3("o denn", 25);
v.push_back(person1);
v.push_back(person2);
v.push_back(person3);
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
(*it).showInfo();
}
}
// 存放自定义类型的指针
void test04() {
vector<Person*> v;
Person person1("roger", 19);
Person person2("rei ri", 20);
Person person3("o denn", 25);
v.push_back(&person1);
v.push_back(&person2);
v.push_back(&person3);
for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) {
(*it)->showInfo();
}
}
// 容器嵌套容器
void test05() {
vector<vector<int>> v;
vector<int>v1;
vector<int>v2;
vector<int>v3;
// 填装小容器
for (int i = 0; i < 5; i++) {
v1.push_back(i + 1);
v2.push_back(i + 1);
v3.push_back(i + 1);
}
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
// 遍历所有数据
for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++) {
for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++) {
cout << *vit << " ";
}
cout << endl;
}
}
int main() {
//test01();
//test02();
//test03();
//test04();
test05();
return EXIT_SUCCESS;
}