array 容器是 C++ 11 标准中新增的 序列容器,同时,STL 也为 array 容器配备了随机访问迭代器,可以用来随机访问 array 容器中的元素。
成员函数 | 功能 |
---|---|
begin() | 返回指向容器中第一个元素的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。 |
end() | 返回指向容器最后一个元素之后一个位置的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。此函数通常和 begin() 搭配使用。 |
rbegin() | 返回指向最后一个元素的反向迭代器;如果是 const 类型容器,在该函数返回的是常量反向迭代器。 |
rend() | 返回指向第一个元素之前一个位置的反向迭代器。如果是 const 类型容器,在该函数返回的是常量反向迭代器。此函数通常和 rbegin() 搭配使用。 |
cbegin() | 和 begin() 功能类似,只不过其返回的迭代器类型为常量正向迭代器,不能用于修改元素。 |
cend() | 和 end() 功能相同,只不过其返回的迭代器类型为常量正向迭代器,不能用于修改元素。 |
crbegin() | 和 rbegin() 功能相同,只不过其返回的迭代器类型为常量反向迭代器,不能用于修改元素。 |
crend() | 和 rend() 功能相同,只不过其返回的迭代器类型为常量反向迭代器,不能用于修改元素。 |
除此之外,C++ 11 标准新增的 begin() 和 end() 函数,当操作对象为 array 容器时,也和迭代器有关,其功能分别和上面的 begin()、end() 成员函数相同。
根据它们的功能并结合实际场景的需要,这些成员函数通常是成对使用的,即 begin()/end()、rbegin()/rend()、cbegin()/cend()、crbegin()/crend() 各自成对搭配使用。
不仅如此,这 4 对中 begin()/end() 和 cbegin()/cend()、rbegin()/rend() 和 crbegin()/crend() 的功能大致是相同的,唯一的区别就在于其返回的迭代器能否用来修改元素值。
值得一提的是,以上函数在实际使用时,其返回值类型都可以使用 auto 关键字代替,编译器可以自行判断出该迭代器的类型。
使用 begin 和 end 迭代器访问元素
#include <iostream>
#include <array>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
array<int, 5> arr;
int v = 1;
auto first = arr.begin();
auto last = arr.end();
while (first != last)
{
*first = v;
++first;
v++;
}
first = arr.begin();
while (first != last)
{
cout << *first << " ";
++first;
}
cout << "\n";
return 0;
}
因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ array.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们看到,我们首先使用了迭代器对数组的元素进行了赋值,接着,我们再次使用了迭代器访问了数组的所有元素。
使用 cbegin 和 cend 迭代器访问元素
#include <iostream>
#include <array>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
array<int, 5> arr{10, 20, 30, 40, 50};
auto first = arr.cbegin();
auto last = arr.cend();
while (first != last)
{
cout << *first << " ";
++first;
}
cout << "\n";
return 0;
}
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
array 模板类还提供了 cbegin() 和 cend() 成员函数,它们和 begin()/end() 唯一不同的是,前者返回的是 const 类型的正向迭代器。
这就意味着,有 cbegin() 和 cend() 成员函数返回的迭代器,可以用来遍历容器内的元素,也可以访问元素,但是不能对所存储的元素进行修改。
array 容器是 C++ 11 标准中新增的序列容器,同时,STL 也为 array 容器配备了随机访问迭代器,可以用来随机访问 array 容器中的元素。