C++ STL标准库:算法<algorithm> 逆转 reverse() reverse_copy()

std::reverse

简介:
将容器的序列变为当前的逆序。

函数原型

template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last);

官方手册
http://www.cplusplus.com/reference/algorithm/reverse/


std::reverse_copy

简介:
reverse_copy() 算法可以将源序列复制到目的序列中,目的序列中的元素是逆序的。

函数原型

template <class BidirectionalIterator, class OutputIterator>
OutputIterator reverse_copy (BidirectionalIterator first, BidirectionalIterator last, OutputIterator result);

官方手册
http://www.cplusplus.com/reference/algorithm/reverse_copy/


使用示例:

#include <iostream>
#include <list>
#include <vector>
#include <algorithm>

using namespace std;

void print(int& ele)
{
	cout<<ele<<", ";
}

void main()
{
	int dim[]={1,2,3,4,5,6,7,8};
	vector<int> v1,v2;
	list<int> l1,l2;

	v1.assign(dim,dim+8);
	reverse(v1.begin(),v1.end());
	cout<<"vector v1: ";
	for_each(v1.begin(),v1.end(),print);
	cout<<endl;

	copy(v1.rbegin(),v1.rend(),back_inserter(l1));
	cout<<"list l1: ";
	for_each(l1.begin(),l1.end(),print);
	cout<<endl;

	reverse(v1.begin()+2,v1.end()-2);
	cout<<"vector v1: ";
	for_each(v1.begin(),v1.end(),print);
	cout<<endl;

	list<int>::iterator posf=l1.begin();
	list<int>::iterator pose=l1.end();
	advance(posf,2);
	advance(pose,-2);
	reverse(posf,pose);
	cout<<"list l1: ";
	for_each(l1.begin(),l1.end(),print);
	cout<<endl;

	reverse_copy(v1.begin(),v1.end(),back_inserter(v2));
	cout<<"vector v2: ";
	for_each(v2.begin(),v2.end(),print);
	cout<<endl;

	cout<<"list l1: ";
	reverse_copy(l1.begin(),l1.end(),ostream_iterator<int>(cout,", "));
	cout<<endl;
}

image-20201217193519149

Line 7: Char 9: ================================================================= ==22==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x502000000354 at pc 0x55de9091eda9 bp 0x7ffeb85c4260 sp 0x7ffeb85c4258 READ of size 4 at 0x502000000354 thread T0 #0 0x55de9091eda8 in swap<int> /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/move.h:222:13 #1 0x55de9091eda8 in iter_swap<__gnu_cxx::__normal_iterator<int *, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int *, std::vector<int, std::allocator<int> > > > /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algobase.h:185:7 #2 0x55de9091eda8 in void std::__reverse<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int>>>>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int>>>, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int>>>, std::random_access_iterator_tag) /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algo.h:1062:4 #3 0x55de9091ec00 in reverse<__gnu_cxx::__normal_iterator<int *, std::vector<int, std::allocator<int> > > > /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algo.h:1089:7 #4 0x55de9091ec00 in Solution::rotate(std::vector<int, std::allocator<int>>&, int) solution.cpp:7:9 #5 0x55de9091e4ad in __helper__ solution.cpp:7:18 #6 0x55de9091e4ad in main solution.cpp:7:30 #7 0x7f3b1408a1c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6) #8 0x7f3b1408a28a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6) #9 0x55de90847f44 in _start (solution+0xb2f44) 0x502000000354 is located 0 bytes after 4-byte region [0x502000000350,0x502000000354) allocated by thread T0 here: #0 0x55de9091bb6d in operator new(unsigned long) /root/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:86:3 #1 0x55de909381de i
03-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值