답변:
함수있다 std::reverse
에서 algorithm
이러한 목적을 위해 헤더.
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
모든 컨테이너는 및로 콘텐츠를 반대로 볼 수 있습니다 . 이 두 함수는 소위 콜백 이터레이터를 리턴 하는데, 일반적인 이터레이터 처럼 사용할 수 있지만 컨테이너가 실제로 리버스 된 것처럼 보입니다.rbegin()
rend()
#include <vector>
#include <iostream>
template<class InIt>
void print_range(InIt first, InIt last, char const* delim = "\n"){
--last;
for(; first != last; ++first){
std::cout << *first << delim;
}
std::cout << *first;
}
int main(){
int a[] = { 1, 2, 3, 4, 5 };
std::vector<int> v(a, a+5);
print_range(v.begin(), v.end(), "->");
std::cout << "\n=============\n";
print_range(v.rbegin(), v.rend(), "<-");
}
Ideone에 대한 실제 예 . 산출:
1->2->3->4->5
=============
5<-4<-3<-2<-1
std::sort
지정되지 않은 순서로 상위 10을 필요로한다면 1000 요소 벡터 도 필요 std::partition
합니까? 이것은 15 년 전과 마찬가지로 오늘날 내 PC 경험을 망쳐 놓은 것으로 생각되는 학교입니다.
print_range
빈 공간 이 지났을 때 작동하지 않습니다 .
std::reverse(a.rbegin(), a.rend())
할 것인가입니다. ; ^)
종종 벡터를 뒤집 으려는 이유는 마지막에 모든 항목을 밀어서 벡터를 채우지 만 실제로는 역순으로 받기 때문입니다. 이 경우 deque
대신 대신 컨테이너를 앞쪽으로 밀어 컨테이너를 뒤집을 수 있습니다 . (또는 vector::insert()
대신 전면에 항목을 삽입 할 수 있지만 삽입 할 때마다 다른 모든 항목을 섞어 야하기 때문에 항목이 많은 경우 속도가 느려집니다.)
std::vector<int> foo;
int nextItem;
while (getNext(nextItem)) {
foo.push_back(nextItem);
}
std::reverse(foo.begin(), foo.end());
대신 다음을 수행 할 수 있습니다.
std::deque<int> foo;
int nextItem;
while (getNext(nextItem)) {
foo.push_front(nextItem);
}
// No reverse needed - already in correct order
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int>v1;
for(int i=0; i<5; i++)
v1.push_back(i*2);
for(int i=0; i<v1.size(); i++)
cout<<v1[i]; //02468
reverse(v1.begin(),v1.end());
for(int i=0; i<v1.size(); i++)
cout<<v1[i]; //86420
}