激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法

C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法

2021-02-20 14:54C語言教程網(wǎng) C/C++

這篇文章主要介紹了C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法,可實(shí)現(xiàn)一個簡單的腳本解釋器,具有一定的參考借鑒價值,需要的朋友可以參考下

本文實(shí)例講述了C/C++函數(shù)調(diào)用棧的實(shí)現(xiàn)方法。可用于實(shí)現(xiàn)簡單的腳本解釋器。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

頭文件聲明部分:

復(fù)制代碼 代碼如下:

#pragma once
const int BUFFERSIZE = 1024;
const int growfactor = 2;
 
// this stack is used as call stack.
class TStack{
private:
size_t size;   // the stack length
size_t pos;    // the stack top position   
char *buffer;  // the buffer

 

private:
void push(void* D, size_t bytecount);  // the implementation of push
void* pop(size_t bytecount);   // the implementation of pop
public:
TStack(size_t _size = BUFFERSIZE, size_t _pos = 0);  // initialize
TStack(const TStack& o);  // copy
TStack& operator=(const TStack& o);  // assignment
void pushInt(int i) { push(&i, sizeof(int)); }  // push an int
void pushLong(long l) { push(&l, sizeof(long)); }  // push a long
void pushfloat(double f) { push(&f, sizeof(f));}  // push  a double
void pushPointer(void* p){ push(p, sizeof(p)); }
// int
int popInt() { return *(int *)pop(sizeof(int));}  // pop an int
long popLong() { return *(long *)pop(sizeof(long)); }  // pop an int   
double* popfloat() { return (double*)pop(sizeof(double)); }  // pop a double
void* popPointer() { return pop(sizeof(void*)) ; }
void clear() { pos = 0; } 
};


 
實(shí)現(xiàn)部分:
 

復(fù)制代碼 代碼如下:
#include "stdafx.h"
#include "TStack.h"
#include "new.h"
 
void TStack::push( void* D, size_t bytecount )
{
// if memory is not enough
// if run under multithread envionment,
// a lock or critical section should be added
if (pos + bytecount > size)
{   
  size_t oldsize = size;
       size *= growfactor;  
  char *newbuffer = new char[size];
  memcpy(newbuffer, buffer, oldsize);
  delete buffer;
  buffer = newbuffer;   
}
memcpy(buffer+pos, D, bytecount);
pos += bytecount;
}
 
void* TStack::pop( size_t bytecount )
{
// need synchronization for multithread environment
pos -= bytecount;
return &buffer[pos];
}
 
TStack::TStack( size_t _size , size_t _pos )
:size(_size),
pos(_pos),
buffer(new char[size])
{
}
 
TStack::TStack( const TStack &O )
:size(O.size),
pos(O.pos)
{
   buffer = new char[size];
   if (buffer != NULL)
   {
  memcpy(buffer, O.buffer, size);
   }
}
 
TStack& TStack::operator=( const TStack& O )
{
if (this == &O)
 return *this;     
    this->size = O.size;
this->pos = O.pos;
 
if (buffer != NULL)
{
delete buffer;
}
    buffer = new char[this->size];
if (buffer != NULL)
{
      memcpy(buffer, O.buffer, this->size);
}
return *this;
}

 

希望本文所述對大家的C++程序設(shè)計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产污网站在线观看 | 欧美一级黄 | 性猛交ⅹxxx乱巴西 在线播放中文 | h色网站免费观看 | 久久久亚洲欧美综合 | 国产免费成人在线 | 欧美日韩国产一区二区三区在线观看 | 亚洲性生活免费视频 | 黄视频网址 | 久久要| 校花被肉干高h潮不断 | 色阁阁69婷婷 | 一级大黄毛片 | 91精品国产99久久久久久 | 18视频在线观看娇喘 | 欧美在线中文字幕 | 国产亚洲综合一区二区 | 免费在线成人网 | 国产精品久久久久免费视频 | 国产精品一区在线观看 | 一级电影在线免费观看 | 欧美精品日日鲁夜夜添 | 经典三级av在线 | 欧美一区二区三区中文字幕 | 欧美日本免费一区二区三区 | 看片一区| 亚洲看片网 | 韩国三级日本三级香港三级黄 | 小视频在线看 | 欧美精品一级 | 成年毛片 | 黄色网址免费进入 | h视频免费在线观看 | 毛片免费试看 | 成人高清网站 | 久久精品久 | 成人不卡一区二区 | 姑娘第四集免费看视频 | www.射| 成年人免费视频大全 | 黄色一级毛片免费看 |