⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ringbuffer.cpp

📁 C++高级编程这本书所附的源代码
💻 CPP
字号:
#include <algorithm>#include <iterator>#include <iostream>#include "RingBuffer.h"using namespace std;// Microsoft Visual Studio requires you to omit the following line.// However, some compilers require it.//const int RingBuffer::kDefaultNumEntries;//// Initialize the vector to hold exactly numEntries. The vector size// does not need to change during the lifetime of the object.//// Initialize the other members.//RingBuffer::RingBuffer(int numEntries, ostream* ostr) : mEntries(numEntries),							mOstr(ostr), mNumEntries(numEntries), mNext(0), mWrapped(false){}RingBuffer::~RingBuffer(){}//// The algorithm is pretty simple: add the entry to the next// free spot, then reset mNext to indicate the free spot after// that. If mNext reaches the end of the vector, it starts over at 0.//// The buffer needs to know if the buffer has wrapped or not so// that it knows whether to print the entries past mNext in operator<<//void RingBuffer::addEntry(const string& entry){  // Add the entry to the next free spot and increment  // mNext to point to the free spot after that.  mEntries[mNext++] = entry;  // Check if we've reached the end of the buffer. If so, we need to wrap.  if (mNext >= mNumEntries) {    mNext = 0;    mWrapped = true;  }  // If there is a valid ostream, write this entry to it.  if (mOstr != NULL) {    *mOstr << entry << endl;  }}ostream* RingBuffer::setOutput(ostream* newOstr){  ostream* ret = mOstr;  mOstr = newOstr;  return (ret);}//// This function uses an ostream_iterator to "copy" entries directly// from the vector to the output stream.//// This function must print the entries in order. If the buffer has wrapped,// the earliest entry is one past the most recent entry, which is the entry// indicated by mNext. So first print from entry mNext to the end.//// Then (even if the buffer hasn't wrapped) print from the beginning to mNext - 1.//ostream& operator<<(ostream& ostr, const RingBuffer& rb){  if (rb.mWrapped) {    //    // If the buffer has wrapped, print the elements from    // the earliest entry to the end.    //    copy (rb.mEntries.begin() + rb.mNext, rb.mEntries.end(),	  ostream_iterator<string>(ostr, "\n"));  }  //  // Now print up to the most recent entry.  // Go up to begin() + mNext because the range is not inclusive on the  // right side.  //  copy (rb.mEntries.begin(), rb.mEntries.begin() + rb.mNext,        ostream_iterator<string>(ostr, "\n"));  return (ostr);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -