vector 用法之:顺向和逆向

要使用迭代器访问矢量中的元素,但不希望修改元素是,可以使用cbegin和cend函数,他们返回const迭代器。

#include "stdafx.h"
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main(int argc,_TCHAR* argv[])
{
	int n[]={1,2,3,4,5};

	vector<int> mydata(std::begin(n),std::end(n));

	cout<<"顺向迭代:"<<endl;

	for(auto  iter = mydata.cbegin(); iter != mydata.cend(); ++iter){
		cout<<(*iter)<<" squared is " << (*iter)*(*iter) << endl;
	}

	cout<<"逆向迭代:"<<endl;

	for(auto  iter = mydata.crbegin(); iter != mydata.crend();iter++){
		cout<<(*iter)<<" squared is " << (*iter)*(*iter) << endl;
	}
<span style="white-space:pre">	</span>//iter的类型是: const_iterator 或者 cons
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【样例输入】 5 1 2 3 4 5 3 6 【样例输出】 1 2 6 3 4 5 5 4 3 6 2 1 【样例输入】 5 1 2 3 4 5 0 6 【样例输出】 error 【样例输入】 5 1 2 3 4 5 6 6 【样例输出】 error 【样例输入】 1 1 1 2 【样例输出】 1 2 2 1 【样例输入】 1 1 0 2 【样例输出】 error 【样例输入】 1 1 2 2 【样例输出】 error 【解题思路】 题目要求我们实现带头结点的双向链表,因此我们需要在链表头部加入空节点,方便对链表进行操作。 在插入元素时,需要先判断插入位置是否合法,位置不合法则输出error,否则,我们需要遍历链表找到要插入位置的前一个节点,然后进行插入操作。 在输出时,需要分别从头开始顺向输出,和从尾开始逆向输出。这个过程中,需要注意控制输出格式,每个元素之间需要用空格分隔开。 【注意点】 1、插入位置合法的范围是[1,链表长度+1],因为可以在链表末尾插入元素。 2、插入元素时需要注意对前后节点的连接操作,以及更新链表长度。 3、输出时需要注意控制输出格式,每个元素之间需要用空格分隔开。 【算法描述】 1、定义双向链表节点结构体,包含前驱指针pre、后继指针next和节点数据data。 2、定义双向链表结构体,包含头结点指针head、尾结点指针tail和链表长度len。 3、实现双向链表的初始化操作,即创建头结点。 4、实现双向链表的插入操作,需要先判断插入位置是否合法,然后遍历链表找到要插入位置的前一个节点,然后进行插入操作。 5、实现双向链表的顺向输出操作,从头开始遍历链表,输出每个节点的data。 6、实现双向链表的逆向输出操作,从尾开始遍历链表,输出每个节点的data。 7、在主函数中读入数据,调用双向链表的初始化操作和插入操作,然后输出链表。 8、完成。 【算法分析】 本题的时间复杂度为O(n),主要是在插入操作和顺向输出、逆向输出操作中耗时最多,其中插入操作需要遍历链表,时间复杂度为O(n),顺向输出和逆向输出操作分别需要遍历链表,时间复杂度也为O(n)。因此总的时间复杂度为O(n)。 【注意事项】 在进行双向链表的插入操作时,需要注意对前后节点的连接操作,以及更新链表长度。同时,在遍历链表时需要注意判断节点是否为空,防止出现空指针异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值