Có một hàm vectơ tích hợp trong C++ để đảo ngược một vector tại chỗ không?Làm thế nào để đảo ngược một vector C++?
Hay bạn chỉ cần thực hiện thủ công?
Có một hàm vectơ tích hợp trong C++ để đảo ngược một vector tại chỗ không?Làm thế nào để đảo ngược một vector C++?
Hay bạn chỉ cần thực hiện thủ công?
Có chức năng std::reverse
trong tiêu đề algorithm
cho mục đích này.
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Bạn có thể sử dụng std::reverse
như thế này
std::reverse(str.begin(), str.end());
Tất cả container cung cấp một đảo ngược xem nội dung của họ với rbegin()
và rend()
. Hai hàm này trả về các số gọi ngược trình lặp ngược, có thể được sử dụng như các trình duyệt thông thường, nhưng có vẻ như vùng chứa thực sự bị đảo ngược.
#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(), "<-");
}
Live example on Ideone. Đầu ra:
1->2->3->4->5
=============
5<-4<-3<-2<-1
không đảo ngược vectơ tại chỗ. Bạn có thể tạo một vectơ mới với std :: vector
@CashCow: Vâng, đối với một, nó là một no-op, đó là O (1). Đảo ngược .. không quá nhiều. Hầu hết thời gian, bạn không thực sự cần một container ngược, bạn chỉ cần * xem * nó như đảo ngược. Trong thực tế, tôi không thể nghĩ về một tình huống mà bạn thực sự cần một container đảo ngược mà không thể được giải quyết với các trình lặp ngược lại. – Xeo
@CashCow: Elegance không phải lúc nào cũng là sự sang trọng thực sự. Trong hầu hết các trường hợp trong sự nghiệp chuyên nghiệp của tôi, tôi chỉ cần một cái nhìn đảo ngược, nhưng không phải là một vectơ đảo ngược. Và trong tất cả những trường hợp đó, hiệu suất sẽ hoàn toàn không cần thiết nếu bạn tạo nhiều bản sao hơn hoặc biến đổi thứ tự. Bạn cũng sẽ 'std :: sort' một vector phần tử 1000, nếu bạn chỉ cần top-10 theo thứ tự không xác định, bởi vì nó thanh lịch hơn' std :: partition'? Đây là trường tư tưởng làm tê liệt kinh nghiệm máy tính của tôi ngày nay như nó đã làm 15 năm trước, với sự khác biệt mà chu kỳ nhiều hơn là lãng phí, hàng tỷ người trong số họ. –
Bạn cũng có thể sử dụng std::list
thay vì std::vector
. list
có chức năng tích hợp list::reverse để đảo ngược các phần tử.
Tôi vừa thêm không gian tên 'std', hy vọng bạn không nhớ;) ... – MartinStettner
Không, cảm ơn. Chỉ cần nhận thấy các chỉnh sửa của bạn và chúng hoàn toàn đầy đủ và chính xác. –
Bạn có thể giải thích cách đảo ngược vec tơ vectơ không? Tôi muốn v [0] được đổi chỗ với v [v.size() - 1] và thứ tự của v [0] [i] vẫn giữ nguyên. Điều này tương tự như việc thay đổi thứ tự các hàng (nếu một véc tơ được xem như một Ma trận). Nếu một vectơ được định nghĩa là: vector> v; đảo ngược (v.begin(), v.end()) không đảo ngược nó. TIA! –