在C++中是否有内置的向量函数可以原地翻转向量?
还是必须手动完成?
这个目的可以使用头文件中的std::reverse
函数来实现。
#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
来对1000个元素的向量进行排序,因为这比std::partition
更优雅?这就是那种思想流派,它使我的PC体验今天像15年前一样受到破坏,不同之处在于浪费的周期更多了,达到了数十亿个。 - Sebastian Machprint_range
不正确:当传递一个空范围时,它将无法工作。 - Nawaz您可以像这样使用 std::reverse
std::reverse(str.begin(), str.end());
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
你也可以使用std::list
代替std::vector
。 list
有一个内置函数list::reverse用于反转元素。