• 学习:容器算法迭代器初识


    vector存放内置数据类型:

    容器: vector

    算法: for_each

    迭代器: vector::iterator

    示例代码:

    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    //第三种方法需要的函数
    void toprint(int val) {
    	cout << val << endl;
    //其实我们可以看下for_each的定义中实现的
    	//for (; _UFirst != _ULast; ++_UFirst)
    	//{
    	//	_Func(*_UFirst); 把传入的函数进行了调用,func传入的是*
    	//}
    }
    
    void test01() {
    	vector<int> v; //创建一个int类型的vector容器
    
    	v.push_back(10); //放入相应的数值
    	v.push_back(20);
    	v.push_back(30);
    	v.push_back(40);
    
    
    	//第一种方式进行遍历容器中的数值
    
    	//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型
    	//vector<int>::iterator pBegin = v.begin(); //v.begin()返回迭代器,这个迭代器指向容器中第一个数据
    	//vector<int>::iterator pEnd = v.end(); //v.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置
    	//while (pBegin != pEnd) {
    	//	cout << *pBegin << endl;
    	//	pBegin++;
    	//}
    
    	//第二种方式进行遍历容器中的数值
    	//for (vector<int>::iterator pBegin = v.begin(); pBegin < v.end(); pBegin++) {
    	//	cout << *pBegin << endl;
    	//}
    
    	//第三种方式进行遍历容器中的数值
    
    	//该函数的定义_Fn for_each(_InIt _First, _InIt _Last, _Fn _Func)
    	for_each(v.begin(), v.end(), toprint);
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    	return 0;
    }
    

    vector存放自定义数据类型:

    示例代码如下:

    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    class Person {
    public:
    	Person(int age,string name) {
    		this->m_Age = age;
    		this->m_Name = name;
    	}
    
    public:
    	int m_Age;
    	string m_Name;
    };
    
    //void test01() {
    //	vector<Person> v;
    //	Person p1(18, "aaa");
    //	Person p2(28, "bbb");
    //	Person p3(28, "bbb");
    //	Person p4(28, "bbb");
    //	Person p5(28, "bbb");
    //	v.push_back(p1);
    //	v.push_back(p2);
    //	v.push_back(p3);
    //	v.push_back(p4);
    //	v.push_back(p5);
    //
    //	for (vector<Person>::iterator begin = v.begin(); begin < v.end(); begin++) {
    //		cout << (*begin).m_Name << " " << (*begin).m_Age << endl;
    //	}
    //}
    
    void test02() {
    	vector<Person*> v;
    	Person p1(18, "aaa");
    	Person p2(28, "bbb");
    	Person p3(28, "ccc");
    	Person p4(28, "ddd");
    	Person p5(28, "eee");
    	v.push_back(&p1);
    	v.push_back(&p2);
    	v.push_back(&p3);
    	v.push_back(&p4);
    	v.push_back(&p5);
    
    	for (vector<Person*>::iterator begin = v.begin(); begin < v.end(); begin++) { //这里创建的迭代器我们目前都可以认为是指针,然后这里创建了存储指针类型
    		cout << (*begin)->m_Name << " " << (*begin)->m_Age << endl;  // 我们首先解引用得到存储Person对象的指针,然后进行->访问
    	}
    }
    
    int main() {
    	//test01();
    	test02();
    	system("pause");
    	return 0;
    }
    

    Vector容器嵌套容器:

    感觉主要理解了其中的迭代器和*迭代器的概念就OK了

    示例代码:

    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<vector>
    
    using namespace std;
    
    int main() {
    
    	vector<int> v1;
    	vector<int> v2;
    	vector<int> v3;
    	vector<int> v4;
    	for (int i = 0; i < 4; i++) {
    		v1.push_back(i + 1);
    		v2.push_back(i + 2);
    		v3.push_back(i + 3);
    		v4.push_back(i + 4);
    	}
    	vector< vector<int> > out_v; //再创建一个防止vector<int>的vector容器
    
    	out_v.push_back(v1);
    	out_v.push_back(v2);
    	out_v.push_back(v3);
    	out_v.push_back(v4);
    
    	for (vector<vector<int>>::iterator it = out_v.begin(); it < out_v.end(); it++) {  //首先拿到的it可以理解为当前的容器的指针,然后解引用为当前的vector的容器
    		for (vector<int>::iterator s_it = (*it).begin(); s_it < (*it).end(); s_it++) { // s_it为当前vector的容器,*s_it为容器中的数值
    			cout << (*s_it);
    		}
    		cout << endl;
    	}	
    
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    SpringBoot
    JS
    域渗透之NTLM Relay
    域渗透之 pre-auth用户枚举
    mysql 必知必会整理—sql 正则表达[五]
    mysql 必知必会整理—sql 简单语句[二]
    redis 简单整理——缓存设计[三十二]
    mysql 必知必会整理——mysql 介绍[一]
    redis 简单整理——哨兵原理[三十一]
    redis 简单整理——客户端哨兵模式[三十]
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/11938865.html
Copyright © 2020-2023  润新知