C++常用函数api

本文档主要整理并记录c++常用的api。

uninitialized_fill_n

函数原型:

1
2
template<class ForwardIterator, class Size, class T>
ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, const T&x);
  • 功能:为以迭代器指向的起始位置的n个元素指定相同的初值.
  • first: 迭代器first指向初始化空间的起始处.
  • n: 表示欲初始化空间的大小
  • x: 初值
  • 返回值:ForwardIterator first:即指向被赋值的尾元素下一位置的迭代器
  • 可参考:http://www.cplusplus.com/reference/memory/uninitialized_fill_n/

uninitialized_copy

1
2
template<class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result);
  • 功能:将迭代器first和last指定的范围内中的元素拷贝到以迭代器result起始的区域内
  • first: 指向源区域的起始处的迭代器
  • last: 指向源区域的结尾处的迭代器
  • result:指向目的区域的起始处的迭代器
  • 返回值:指向新的结束位置的迭代器

copy_backward

1
2
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
  • copy_backward() 会复制前两个迭代器参数指定的序列到以第三个迭代器为下一个位置的区间内。
  • 第三个参数是目的序列的结束迭代器,通过将源序列中的最后一个元素复制到目的迭代器之前的内存空间内。
  • copy_backward() 的 3 个参数都必须是可以自增或自减的双向迭代器,这意味着这个算法只能应用到序列容器的序列上。

什么情况下需要用到copy_backward?

测试程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void test_copy_backward() {
vector<int> v1{2, 443, 121, 64};
vector<int> v2(10, -1);
auto beg = v2.begin() + v1.size() + 3;

copy_backward(v1.begin(), v1.end(), beg);
for (int i = 0; i < v2.size(); ++i) {
cout << i << "\t";
}
cout << endl;
for (int i = 0; i < v2.size(); ++i) {
cout << v2[i] << "\t";
}
cout << endl;
}

运行结果:

1
2
0	1	2	3	4	5	6	7	8	9	
-1 -1 -1 2 443 121 64 -1 -1 -1

__STL_TRY

__STL_TRY是宏定义

https://blog.csdn.net/Windgs_YF/article/details/80909170