回答:
この目的のためstd::reverse
に、algorithm
ヘッダーに関数があります。
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
すべてのコンテナは、およびを使用して、コンテンツを逆に表示します。これらの2つの関数は、通常のリバースイテレーターのように使用できるso-callesのリバースイテレーターを返しますが、実際にはコンテナーがリバースされているように見えます。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(), "<-");
}
イデオネでの実例。出力:
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())
するかということです。; ^)
のstd::list
代わりに使用することもできますstd::vector
。要素を逆にするためのlist
組み込み関数list :: reverseがあります。
多くの場合、ベクターを逆にする必要があるのは、最後にすべてのアイテムを押してベクターを埋めたが、実際には逆の順序でそれらを受け取っていたためです。その場合は、deque
代わりにaを使用して直接前面に押すことで、コンテナーを逆にすることができます。(または、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
}