Apakah ada fungsi vektor bawaan di C ++ untuk membalikkan vektor pada tempatnya?
Atau apakah Anda hanya perlu melakukannya secara manual?
Apakah ada fungsi vektor bawaan di C ++ untuk membalikkan vektor pada tempatnya?
Atau apakah Anda hanya perlu melakukannya secara manual?
Jawaban:
Ada fungsi std::reverse
di algorithm
header untuk tujuan ini.
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Semua wadah menawarkan tampilan kontennya yang terbalik dengan rbegin()
dan rend()
. Kedua fungsi ini mengembalikan apa yang disebut iterator terbalik , yang dapat digunakan seperti yang normal, tetapi akan terlihat seperti wadah yang sebenarnya terbalik.
#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(), "<-");
}
Contoh langsung di Ideone . Keluaran:
1->2->3->4->5
=============
5<-4<-3<-2<-1
std::sort
vektor elemen 1000, jika Anda hanya perlu top-10 dalam urutan yang tidak ditentukan, karena lebih elegan daripada std::partition
? Ini adalah aliran pemikiran yang melumpuhkan pengalaman PC saya hari ini seperti yang terjadi 15 tahun yang lalu, dengan perbedaan bahwa lebih banyak siklus terbuang, miliaran dari mereka.
print_range
tidak benar: itu tidak akan berfungsi ketika rentang kosong dilewatkan.
std::reverse(a.rbegin(), a.rend())
dilakukan? ; ^)
Anda bisa menggunakan std::reverse
seperti ini
std::reverse(str.begin(), str.end());
Anda juga dapat menggunakan std::list
bukan std::vector
. list
memiliki daftar fungsi bawaan :: membalikkan untuk membalikkan elemen.
Seringkali alasan Anda ingin membalikkan vektor adalah karena Anda mengisinya dengan mendorong semua item pada akhirnya tetapi sebenarnya menerimanya dengan urutan terbalik. Dalam hal ini Anda dapat membalikkan wadah saat Anda pergi dengan menggunakan deque
gantinya dan mendorongnya langsung di depan. (Atau Anda bisa memasukkan item di depan dengan vector::insert()
gantinya, tapi itu akan lambat ketika ada banyak item karena harus mengocok semua item lainnya untuk setiap penyisipan.) Jadi, berbeda dengan:
std::vector<int> foo;
int nextItem;
while (getNext(nextItem)) {
foo.push_back(nextItem);
}
std::reverse(foo.begin(), foo.end());
Anda bisa melakukannya:
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
}