【C++STL容器】:vector存放数据以及存放自定义的数据类型-创新互联
前言
二、向容器中插入数据
三、通过迭代器访问容器中的数据 1、利用起始和结束两个迭代器
2、直接使用 for 循环
3、利用
四、存储自定义数据类型
五、存储自定义的指针数据类型
网页名称:【C++STL容器】:vector存放数据以及存放自定义的数据类型-创新互联
标题URL:http://myzitong.com/article/ccgpis.html
时不可以苟遇,道不可以虚行。
创新互联是一家专业提供曹妃甸企业网站建设,专注与网站建设、网站设计、H5页面制作、小程序制作等业务。10年已为曹妃甸众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
STL 中最常用的容器为:vector
,暂且把它理解为我们之前学过的数组Array
。
- 添加头文件:
#include
vectorv;
二、向容器中插入数据
- 利用内置函数:
push_back()
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
三、通过迭代器访问容器中的数据 1、利用起始和结束两个迭代器
- 先声明两个迭代器,一个指向容器中的第一元素,一个指向容器中的最后一个元素的下一个位置
- 然后利用一层
while
循环,依次遍历容器中的元素。
vector::iterator itBegin = v.begin(); //起始迭代器,指向容器中第一个元素
vector::iterator itEnd = v.end(); //结束迭代器,指向容器中最后一个元素的下一个位置
while (itBegin != itEnd) { cout<< *itBegin<< endl;
itBegin++;
}
2、直接使用 for 循环
- 使用
for
循环,定义一个临时的起始迭代器指向容器v
中第一个元素,当 该迭代器 指向位置到达容器 v 中的最后一个元素的下一个位置时,结束循环。
for (vector::iterator it = v.begin(); it != v.end(); it++) {cout<< *it<< endl;
}
3、利用
for_each
遍历算法- 需要添加头文件:
#include
,标准算法的头文件 - 创建一个打印函数作为这个算法的第三个函数参数
void myPrint(int val) {cout<< val<< endl;
}
//最后一个参数为:传入函数名,回调作用
for_each(v.begin(), v.end(), myPrint);
- 跳转
for_each
函数的定义,其实现方法也是使用一层for
循环。
for_each(_InputIterator __first, _InputIterator __last, _Function __f)
{ // concept requirements
__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
__glibcxx_requires_valid_range(__first, __last);
for (; __first != __last; ++__first)
__f(*__first);
return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant.
}
四、存储自定义数据类型
- 定义一个
Person
类:
class Person {public:
Person(string name, int age) {this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
- 定义一个存储自定义数据类型的容器:
vectorv;
- 定义
Person
类对象,作为存储数据:
Person p1("a", 1);
Person p2("b", 2);
Person p3("n", 3);
Person p4("m", 3);
Person p5("u", 3);
- 向容器中添加数据:
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
- 遍历容器中的数据:(提示:
<>
中的数据类型是什么,(*it)
取出来的东西就是什么) - 例如这里:
<>
中的是Person
,所以(*it)
表示的是Person
对象,it
表示的是Person
对象的地址,也可以直接通过it->m_Name
和it->m_Age
(地址指向)的方式,取出数据。
for (vector::iterator it = v.begin(); it != v.end(); it++) {cout<< "姓名:"<< (*it).m_Name<< " 年龄:"<< (*it).m_Age<< endl;
}
for (vector::iterator it = v.begin(); it != v.end(); it++) {cout<< "姓名:"<< it->m_Name<< " 年龄:"<< it->m_Age<< endl;
}
五、存储自定义的指针数据类型
- 定义一个
Person
类:
class Person {public:
Person(string name, int age) {this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
- 定义一个存储自定义数据类型的容器:
vectorv;
- 定义
Person
类对象,作为存储数据:
Person p1("a", 1);
Person p2("b", 2);
Person p3("n", 3);
Person p4("m", 3);
Person p5("u", 3);
- 向容器中添加数据,存放指针的话,需要在地址前面多加上一个取址符号(
&
)
v.push_back(&p1);
v.push_back(&p2);
v.push_back(&p3);
v.push_back(&p4);
v.push_back(&p5);
- 遍历容器的数据:(提示:
<>
中的数据类型是什么,(*it)
取出来的东西就是什么) - 此时
<>
的是Person*
,所以(*it)
表示的是Person
对象的地址,可以通过(*it)->m_Name
和(*it)->m_Age
的方式,取出数据。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页名称:【C++STL容器】:vector存放数据以及存放自定义的数据类型-创新互联
标题URL:http://myzitong.com/article/ccgpis.html