学习记录——递归和堆栈
来源:互联网 发布:英雄联盟 魔兽世界知乎 编辑:程序博客网 时间:2024/05/27 21:49
今天在学习递归和堆栈的知识[1]中,使用堆栈进行求和运算过程中遇到了"deque iterator not dereferencable"问题:
#include "stdafx.h"#include <iostream>#include <stack>using namespace std;
递归求和函数:
int sum1(int value){if (value==1)return 1;elsereturn value+sum1(value-1);}
堆栈求和函数:
主函数:
运行结果出错:
经检查发现是在使用堆栈进行求和运算过程中遇到了"deque iterator not dereferencable"问题;
通过查找资料[2],发现原因是在栈容器中访问了某一个不存在的位置(注:此处问题也可以延伸到其他有相关push、pop操作的容器中)
检查sum2函数发现:标红处执行了不恰当的访问操作。当stack容器中的元素都pop完后,程序依旧去执行了while中的条件语句,此时已不存在返回的val.top数据。
为此,要怎样避免访问到不存在的位置呢?修改sum2函数如下:
也可以修改为:
感谢以下相关参考来源:
【1】http://blog.csdn.net/feixiaoxing/article/details/6838773
【2】http://blog.csdn.net/midle110/article/details/8238581
int sum2(int value){ stack<int> val; int count = 0 ; int number = 0; while(value>0){ val.push(value); value--; } while(0!=(number=val.top())) { count+=number; cout<<number<<endl; val.pop(); } return count;}
主函数:
int _tmain(int argc, _TCHAR* argv[]){int num1 = sum1(6); int num2 = sum2(6);cout<<"result = "<<num1<<endl <<num2 <<endl;return 0;}
运行结果出错:
经检查发现是在使用堆栈进行求和运算过程中遇到了"deque iterator not dereferencable"问题;
通过查找资料[2],发现原因是在栈容器中访问了某一个不存在的位置(注:此处问题也可以延伸到其他有相关push、pop操作的容器中)
检查sum2函数发现:标红处执行了不恰当的访问操作。当stack容器中的元素都pop完后,程序依旧去执行了while中的条件语句,此时已不存在返回的val.top数据。
为此,要怎样避免访问到不存在的位置呢?修改sum2函数如下:
int sum2(int value){//先将所有元素压入栈后,在弹出每个元素的过程中求和 stack<int> val; int count = 0 ;</span> while(value!=0){ val.push(value); // 例如压入 6 5 4 3 2 1 value--; } while( !val.empty()) { count+=val.top(); //求和 cout<< val.top()<<endl; //弹出 1 2 3 4 5 6 val.pop(); } return count;}此处通过val.empty()作为条件语句,避免了访问不存在的位置。
也可以修改为:
int sum2(int value){stack<int> val;int count = 0 ;int number = 0; // 每次压入一个数值后,随即弹出 加入到求和操作,直至不再压入数值val.push(value);while(0!=(number=val.top())){val.pop();count+=number;cout<<number<<endl;val.push(number-1);}return count;}
感谢以下相关参考来源:
【1】http://blog.csdn.net/feixiaoxing/article/details/6838773
【2】http://blog.csdn.net/midle110/article/details/8238581
0 0
- 学习记录——递归和堆栈
- 算法学习之递归和堆栈
- 数据结构-递归和堆栈
- 算法与数据结构学习 03 递归和堆栈
- 多叉树的递归遍历和堆栈遍历
- 记录自已学习之堆栈(链表)
- OpenSSL学习笔记——堆栈
- OpenGL学习三——矩阵堆栈
- LinuxC编程一站式学习——堆栈
- 数据结构学习——堆栈代码
- 学习笔记—递归
- 数据结构——队列、堆栈和哈希表
- 数据结构归纳——队列和堆栈
- 数据结构——堆栈和队列
- 数据结构学习记录连载5(堆栈的学习)
- 数据结构学习记录连载6(堆栈的学习续)
- 数据结构学习——递归的概念和程序实现
- 一步一步写算法(之递归和堆栈)
- hdu2674 N! 找规律
- fancy2D 源码解析 1 TestCpp
- Web应用启动时,后台自动启动一个线程
- Lowest Common Ancestor of a Binary Tree leetcode236
- 分享功能 集成友盟分享
- 学习记录——递归和堆栈
- hdu2604矩阵快速幂
- sublimetext mac常用快捷键
- java中Date的getTime()函数
- OC 基础之----属性
- websphere MQ 编程指南(Java)
- LightOJ 1070 Algebraic Problem (推导+矩阵快速幂)
- java io
- NSObject