reverse_copy() 算法可以将源序列复制到目的序列中,目的序列中的元素是逆序的。定义源序列的前两个迭代器参数必须是双向迭代器。目的序列由第三个参数指定,它是目的序列的开始迭代器,也是一个输出迭代器。如果序列是重叠的,函数的行为是未定义的。这个算法会返回一个输出迭代器,它指向目的序列最后一个元素的下一个位置。
本文作者原创,转载请附上文章出处与本文链接。
C++ reverse()函数用法详解(深入了解,一文学会)目录
1 reverse
1.1 反转Vector容器
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> a;
for (int i = 0; i < 10; i++)
{
a.push_back(i);
}
cout << "翻转前: " << "\n";
for (int i = 0; i < 10; i++)
{
cout << a[i];
}
reverse(a.begin(), a.end());
cout << "\n" << "翻转后: " << "\n";
for (int i = 0; i < 10; i++)
{
cout << a[i];
}
}
1.2 反转string
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string s = "abcdefg";
cout << "翻转前: " << "\n";
cout << s;
reverse(s.begin(), s.end());
cout << "\n" << "翻转后: " << "\n";
cout << s;
}
1.3 翻转字符数组
#include <iostream>
#include <vector>
using namespace std;
int main()
{
char s[] = "abcdefg";
int N = sizeof(s) / sizeof(s[0]);
cout << "翻转前: " << "\n";
cout << s;
reverse(s, s + N - 1);
cout << "\n" << "翻转后: " << "\n";
cout << s;
}
1.4 反转数组
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int s[] = { 1,2,3,4,5,6,7,8,9 };
cout << "翻转前: " << "\n";
for (int i = 0; i < sizeof(s) / sizeof(s[0]); i++)
cout << s[i] << " ";//输出9 8 7 6 5 4 3 2 1
reverse(s, s + 9);
cout << "\n" << "翻转后: " << "\n";
for (int i = 0; i < sizeof(s) / sizeof(s[0]); i++)
cout << s[i] << " ";//输出9 8 7 6 5 4 3 2 1
}
2 reverse_copy()
reverse_copy函数和reverse函数的唯一区别在于:reverse_copy会将结果拷贝到另外一个容器中,不影响原容器的内容。
reverse_copy(sourceBeg,sourceEnd,destBeg)
reverse_copy()会将源区间[sourceBeg,sourceEnd)内的元素复制到"以destBeg起始的目标区间",并在复制过程中颠倒安置次序;(注:原数组不变)
这里只放了一个例子,其他例子也类似
// Testing for palindromes using reverse_copy()
#include <iostream> // For standard streams
#include <iterator> // For stream iterators and begin() and end()
#include <algorithm> // For reverse_copy() and copy_if()
#include <cctype> // For toupper() and isalpha()
#include <string>
using namespace std;
using std::string;
int main()
{
string first, second;
first = "123456789";
second.resize(first.size());
reverse_copy(first.begin(), first.end(), second.begin());
cout << second << endl;
}