【STL三】序列容器——array
- 一、array简介
- 二、头文件
- 三、模板类
- 四、成员函数
- 1、迭代器
- 2、元素访问
- 3、容量
- 4、操作
- 五、demo
- 1、容量(不使用迭代器)
- 2、使用迭代器
- 3、元素访问 at()、front()、back()、data()
一、array简介
-
array 容器是 C++ 11 标准中新增的序列容器,简单地理解,它就是在 C++ 普通数组的基础上,添加了一些成员函数和全局函数。在使用上,它比普通数组更安全,且效率并没有因此变差。
-
和其它容器不同,array 容器的大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。
-
实际项目应用特别少。
二、头文件
#include <array>
三、模板类
template<
class T,
std::size_t N
> struct array;
四、成员函数
1、迭代器
成员函数 | 功能 |
---|---|
begin() | 返回指向容器中第一个元素的随机访问迭代器。 |
end() | 返回指向容器最后一个元素之后一个位置的随机访问迭代器,通常和 begin() 结合使用。 |
rbegin() | 返回指向最后一个元素的随机访问迭代器。 |
rend() | 返回指向第一个元素之前一个位置的随机访问迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
crbegin() | 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
crend() | 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。 |
2、元素访问
成员函数 | 功能 |
---|---|
operator[] | 访问指定的元素 |
at(n) | 返回容器中 n 位置处元素的引用,该函数自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常。 |
front() | 返回容器中第一个元素的直接引用,该函数不适用于空的 array 容器。 |
back() | 返回容器中最后一个元素的直接应用,该函数同样不适用于空的 array 容器。 |
data() | 返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等类似功能。 |
3、容量
成员函数 | 功能 |
---|---|
size() | 返回容器中当前元素的数量,其值始终等于初始化 array 类的第二个模板参数 N。 |
max_size() | 返回容器可容纳元素的最大数量,其值始终等于初始化 array 类的第二个模板参数 N。 |
empty() | 判断容器是否为空,和通过 size()==0 的判断条件功能相同,但其效率可能更快。 |
4、操作
成员函数 | 功能 |
---|---|
fill(val) | 将 val 这个值赋值给容器中的每个元素。 |
array1.swap(array2) | 交换 array1 和 array2 容器中的所有元素,但前提是它们具有相同的长度和类型。 |
五、demo
1、容量(不使用迭代器)
//array 容器。
#include <iostream>
#include <array>
#include<string>
using namespace std;
int main()
{
array<string,5> words{ "one","two","three","four","five" }; //words被初始化成有5个元素(固定)
cout << "遍历(正序):" << endl;
for (int i = 0; i < words.size(); ++i)
cout << words[i] << " "; //像普通数组一样使用数组容器
return 0;
}
输出
遍历(正序):
one two three four five
2、使用迭代器
- begin()、end()、rbegin()、rend()
//array 容器。
#include <iostream>
#include <array>
#include<string>
#include<vector>
using namespace std;
int main()
{
array<string,5> words{ "one","two","three","four","five" }; //words被初始化成有5个元素(固定)
cout << "遍历(正序):" << endl;
// std::array<string>::iterator iter;//错误,arr容器不可以像其他容器这样定义初始化,我也不清楚。
for ( auto iter = words.begin(); iter < words.end(); ++iter)
cout << *iter << " ";
cout << endl;
cout << "遍历(逆序):" << endl;
for (auto iter = words.rbegin(); iter < words.rend(); ++iter)
cout << *iter << " ";
return 0;
}
输出
遍历(正序):
one two three four five
遍历(逆序):
five four three two one
3、元素访问 at()、front()、back()、data()
//array 容器。
#include <iostream>
#include <array>
#include<string>
using namespace std;
int main()
{
array<string,5> words{ "one","two","three","four","five" }; //words被初始化成有5个元素(固定)
cout << "words.at(2)=" << words.at(2) << endl;
cout << "words.front()=" << words.front() << endl;
cout << "words.back()=" << words.back() << endl;
string* da=words.data();
while (!da->empty())
{
cout << "words.data()=" << *da << endl;
da++;
}
return 0;
}
输出
words.at(2)=three
words.front()=one
words.back()=five
words.data()=one
words.data()=two
words.data()=three
words.data()=four
words.data()=five
words.data()=
参考:
1、C++ STL 容器库 中文文档
2、STL教程:C++ STL快速入门
3、https://www.apiref.com/cpp-zh/cpp/header.html
4、https://en.cppreference.com/w/cpp/container