前言
時不可以茍遇,道不可以虛行。文章來源:http://www.zghlxwxcb.cn/news/detail-615367.html
STL 中最常用的容器為:vector
,暫且把它理解為我們之前學過的數(shù)組Array
。文章來源地址http://www.zghlxwxcb.cn/news/detail-615367.html
一、創(chuàng)建一個vector容器(數(shù)組)
- 添加頭文件:
#include <vector>
vector<int> v;
二、向容器中插入數(shù)據(jù)
- 利用內(nèi)置函數(shù):
push_back()
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
三、通過迭代器訪問容器中的數(shù)據(jù)
1、利用起始和結(jié)束兩個迭代器
- 先聲明兩個迭代器,一個指向容器中的第一元素,一個指向容器中的最后一個元素的下一個位置
- 然后利用一層
while
循環(huán),依次遍歷容器中的元素。
vector<int>::iterator itBegin = v.begin(); //起始迭代器,指向容器中第一個元素
vector<int>::iterator itEnd = v.end(); //結(jié)束迭代器,指向容器中最后一個元素的下一個位置
while (itBegin != itEnd) {
cout << *itBegin << endl;
itBegin++;
}
2、直接使用 for 循環(huán)
- 使用
for
循環(huán),定義一個臨時的起始迭代器指向容器v
中第一個元素,當 該迭代器 指向位置到達容器 v 中的最后一個元素的下一個位置時,結(jié)束循環(huán)。
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
3、利用 for_each 遍歷算法
- 需要添加頭文件:
#include <algorithm>
,標準算法的頭文件 - 創(chuàng)建一個打印函數(shù)作為這個算法的第三個函數(shù)參數(shù)
void myPrint(int val) {
cout << val << endl;
}
//最后一個參數(shù)為:傳入函數(shù)名,回調(diào)作用
for_each(v.begin(), v.end(), myPrint);
- 跳轉(zhuǎn)
for_each
函數(shù)的定義,其實現(xiàn)方法也是使用一層for
循環(huán)。
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.
}
四、存儲自定義數(shù)據(jù)類型
- 定義一個
Person
類:
class Person {
public:
Person(string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
- 定義一個存儲自定義數(shù)據(jù)類型的容器:
vector<Person> v;
- 定義
Person
類對象,作為存儲數(shù)據(jù):
Person p1("a", 1);
Person p2("b", 2);
Person p3("n", 3);
Person p4("m", 3);
Person p5("u", 3);
- 向容器中添加數(shù)據(jù):
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
- 遍歷容器中的數(shù)據(jù):(提示:
<>
中的數(shù)據(jù)類型是什么,(*it)
取出來的東西就是什么) - 例如這里:
<>
中的是Person
,所以(*it)
表示的是Person
對象,it
表示的是Person
對象的地址,也可以直接通過it->m_Name
和it->m_Age
(地址指向)的方式,取出數(shù)據(jù)。
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
cout << "姓名:" << (*it).m_Name << " 年齡:" << (*it).m_Age << endl;
}
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
cout << "姓名:" << it->m_Name << " 年齡:" << it->m_Age << endl;
}
五、存儲自定義的指針數(shù)據(jù)類型
- 定義一個
Person
類:
class Person {
public:
Person(string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
- 定義一個存儲自定義數(shù)據(jù)類型的容器:
vector<Person*> v;
- 定義
Person
類對象,作為存儲數(shù)據(jù):
Person p1("a", 1);
Person p2("b", 2);
Person p3("n", 3);
Person p4("m", 3);
Person p5("u", 3);
- 向容器中添加數(shù)據(jù),存放指針的話,需要在地址前面多加上一個取址符號(
&
)
v.push_back(&p1);
v.push_back(&p2);
v.push_back(&p3);
v.push_back(&p4);
v.push_back(&p5);
- 遍歷容器的數(shù)據(jù):(提示:
<>
中的數(shù)據(jù)類型是什么,(*it)
取出來的東西就是什么) - 此時
<>
的是Person*
,所以(*it)
表示的是Person
對象的地址,可以通過(*it)->m_Name
和(*it)->m_Age
的方式,取出數(shù)據(jù)。
到了這里,關(guān)于【C++ STL容器】:vector存放數(shù)據(jù)以及存放自定義的數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!