使用迭代器逆置容器元素

 

代码如下:

 

template <typename It>
void reverse(It begin, It end)
{
    while(begin != end)
    {
        --end;
        if(begin != end)
            std::swap(*begin++, *end);
    }
}

 

 

注意几点:

1.不能一开始就--end,原因是[begin, end)是左闭右开区间,如果begin和end相等,--end则破坏了区间,不是每个迭代器都支持< >操作。

2.在循环内部,不能直接begin++,end--,原因是防止两个相邻的元素。

综合以上原因,只能在循环体内先--end,然后swap的时候begin++;

时间: 2024-10-07 16:22:00

使用迭代器逆置容器元素的相关文章

线性表&gt;&gt;顺序表---&gt;逆置所有元素

1 /*顺序表中所有的元素逆置 2 * 3 */ 4 #include <iostream.h> 5 using namespace std; 6 7 int main(){ 8 void reverse_arr(int arr[],int n); 9 int a[]={0,1,2,3,4,5,6,7}; 10 int n=7; 11 reverse_arr(a,n); 12 for(int i=0;i<=n;i++){ 13 cout << a[i] << &q

元素逆置

将一个数组中的元素逆置 #include<iostream> #include<math.h> #include<string.h> using namespace std; int main() { char a[]="hello world"; int n=strlen(a); char b; for(int i=0;i<n/2;i++) { b=a[i]; a[i]=a[n-i-1]; a[n-i-1]=b; } puts(a); ret

deque双端队列容器(对象创建,数组、迭代器方式访问,元素的赋值、插入、删除等)

deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除.不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势. 头文件 #include<deque> 创建deque对象 1)deque();//创建一个没有任何元素的deque对象. deque<int> d 2)deque(size_typen);//创建一个具有n个元素的deque对象,每个元素采用它的类型下的默认值. deque<int> d(10)

SDUT 3327 顺序表应用4:元素位置互换之逆置算法

顺序表应用4:元素位置互换之逆置算法 Time Limit: 10 ms Memory Limit: 570 KiB Problem Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N).空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段.注意:先将顺序

C语言:实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置

#include<stdio.h> void init(int arr[],int len) {  int i=0;  printf("初始化数组->:\n");  for(i=0;i<len;i++)  {    scanf("%d",&arr[i]);   }  } void reverse(int arr[],int len) {  int i=0;  printf("逆置数组->:\n");  for

创建一个数组, 实现初始化数组、清空数组、完成数组元素的逆置。

#include <stdio.h> void init(int arr[],int len) { int i=0; int num=0; printf("初始化数组->:\n"); for(i=0;i<len;i++) { scanf("%d",&num); arr[i]=num; } } void empty(int arr[],int len) { int i=0; printf("清空数组->:\n"

已知单链表的数据元素为整型数且递增有序,L为单链表的哨兵指针。编写算法将表中值大于X小于Y的所有结点的顺序逆置。(C语言)

对此题目的完整示例可直接运行代码如下: #include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; struct LNode *next; }LNode; LNode* creat(int n){ LNode *Link; LNode *p1,*p2; int data; Link=(LNode*)malloc(sizeof(LNode)); p2=Link; for(int i=0;i<n;+

对于&quot;单链表逆置和递归&quot;的问题的理解.

一. 相关知识要点: 学习或了解基础数据结构和C语言, 对基础链表知识或相关知识有概况性认识. 例如: 本题目结构为: 1 #define elem_type int 2 3 typedef struct _single_list { 4 elem_type data; //所存的数据元素 5 _single_list *next; //所存的指针元素 6 }ListNode; 二. 问题的思考过程(本题以3种不同的方法解决): <1>类似于我们学习的C语言基础知识中的冒泡排序(参考C程序设计

【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)

建立源文件List.cpp include "List.h" int main() {     Test();     system("pause");     return 0; } 建立头文件List.h #ifndef __LISH_H__ #define __LISH_H__ #include<iostream> using namespace std; typedef int DataType; struct ListNode {     Li