学习:容器算法迭代器初识
vector存放内置数据类型:
容器: vector
算法: for_each
迭代器: vector
示例代码:
#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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY