余睿的博客

浮生若梦,别多会少,不如莫遇

0%

STL剖析/c-array容器的使用

构造函数

array的初始化使用聚合初始化(aggregate initialization),聚合初始内容如下:

1
array<T,size> arr_name{aggregate initialization};

其中,T为任意类型(含基本类型以外的自定义类型);size为指定容器的大小;arr_namearray对象名;aggregate initialization采用聚合初始化,更多内容见 [聚合初始化] (https://zh.cppreference.com/w/cpp/language/aggregate_initialization/)

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<array>
#include<iostream>
using namespace std;

int main() {
/**************构造函数***************/
cout << "**************构造函数***************\n";
array<int, 3> a{ 1,2,3 };//构造含三个元素的array对象
for (const auto& e : a) {
cout << e << "\t";
}
cout << '\n';
array<string, 2> str{ string("a"),"b" };
for (const auto& e : str) {
cout << e << "\t";
}
return 0;
}

输出:

1
2
3
**************构造函数***************
1 2 3
a b

迭代器

c++提供以下几种迭代器供使用:

  1. begin/cbegin:返回指向起始的迭代器
  2. end/cend:返回指向末尾的迭代器
  3. rbegin/crbegin:返回指向起始的逆向迭代器
  4. rend/crbegin:返回指向末尾的逆向迭代器

需要注意的是,上面所列举的迭代器前面的c表示const

几种容器的结构如下图所示:

range-begin-end.svg

range-rbegin-rend.svg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <algorithm>
#include <iostream>
#include <string>
#include <string_view>
#include <array>

int main()
{
constexpr std::array<std::string_view, 8> data = {"▁","▂","▃","▄","▅","▆","▇","█"};

std::array<std::string, std::size(data)> arr;

// 'data' 是只读 array 故我们只能用 const 版本的迭代器读取它
// (注意 'cbegin' 前面的 'c' 代表 'const' );
// 'arr' 是目标,故使用非 const 版本的迭代器 'begin' 。
std::copy(data.cbegin(), data.cend(), arr.begin());
// ^ ^ ^

auto print = [](const std::string_view s) { std::cout << s << ' '; };

print("Print 'arr' in direct order using [cbegin, cend):\t");
std::for_each(arr.cbegin(), arr.cend(), print);
// ^ ^
print("\n\nPrint 'arr' in reverse order using [crbegin, crend):\t");
std::for_each(arr.crbegin(), arr.crend(), print);
// ^^ ^^
print("\n");
}

输出:

1
2
3
Print 'arr' in direct order using [cbegin, cend):        ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ 

Print 'arr' in reverse order using [crbegin, crend): █ ▇ ▆ ▅ ▄ ▃ ▂ ▁

样例来源:https://zh.cppreference.com/w/cpp/container/array/rbegin

元素访问

容量

操作

欢迎关注我的其它发布渠道