使用迭代器逆置容器元素

 

代码如下:

 

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++;

转载于:https://www.cnblogs.com/inevermore/p/3998846.html

以下是使用C语言将循环队列元素的示例代码: ```c #include <stdio.h> #define MAX_SIZE 10 typedef struct { int data[MAX_SIZE]; int front, rear; } Queue; void initQueue(Queue *q) { q->front = q->rear = 0; } int isEmpty(Queue q) { return q.front == q.rear; } int isFull(Queue q) { return (q.rear + 1) % MAX_SIZE == q.front; } void enqueue(Queue *q, int value) { if (isFull(*q)) { printf("Queue is full!\n"); return; } q->data[q->rear] = value; q->rear = (q->rear + 1) % MAX_SIZE; } int dequeue(Queue *q) { if (isEmpty(*q)) { printf("Queue is empty!\n"); return -1; } int value = q->data[q->front]; q->front = (q->front + 1) % MAX_SIZE; return value; } void reverseQueue(Queue *q) { int temp[MAX_SIZE], i = 0; while (!isEmpty(*q)) { temp[i++] = dequeue(q); } for (int j = i - 1; j >= 0; j--) { enqueue(q, temp[j]); } } void printQueue(Queue q) { while (!isEmpty(q)) { printf("%d ", dequeue(&q)); } printf("\n"); } int main() { Queue q; initQueue(&q); for (int i = 1; i <= 5; i++) { enqueue(&q, i); } printf("Original queue: "); printQueue(q); reverseQueue(&q); printf("Reversed queue: "); printQueue(q); return 0; } ``` 该代码中,我们定义了一个循环队列结构体 Queue,其中包含了队列的数据和队头、队尾指针。我们实现了队列的初始化、判空、判满、入队、出队、和打印等函数。 在函数中,我们先将队列中的元素全部出队并保存到一个临时数组中,然后再将临时数组中的元素序入队到队列中。 在主函数中,我们初始化了一个循环队列,将一些元素入队,并依次打印出原始队列和后的队列。运行结果如下: ``` Original queue: 1 2 3 4 5 Reversed queue: 5 4 3 2 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值