4.1 / 4.2
stack.h
文件
#pragma once #include<string>#include<vector> class Stack {public: bool push(const std::string &); // 参数名能够省略 bool pop(std::string &); bool peek(std::string &); bool empty() { return _stack.size() == 0; } bool full() { // 实际上max_size不肯定代表元素个数肯定能达到这个值 return _stack.size() == _stack.max_size(); } // 如果定义在class自身中, 那么默认为inline函数 int size() { return _stack.size(); } bool find(const std::string &); int count(const std::string &); private: std::vector<std::string> _stack;};
stack.cc
文件
#include<iostream>#include "stack.h"bool Stack::push(const std::string & ele) { if (full()) { return false; } _stack.push_back(ele); return true;}bool Stack::peek(std::string & ele) { if (empty()) { return false; } ele = _stack.back(); return true;}bool Stack::pop(std::string & ele) { if (empty()) { return false; } ele = _stack.back(); _stack.pop_back(); return true;}bool Stack::find(const std::string & ele) { if (empty()) { return false; } std::vector<std::string>::iterator it = std::find(_stack.begin(), _stack.end(), ele); return it != _stack.end();}int Stack::count(const std::string & ele) { int cnt = 0; if (empty()) { return cnt; } auto it = _stack.begin(); while (true) { it = std::find(it, _stack.end(), ele); if (it != _stack.end()) { cnt++; it++; // 这里肯定要++, 不然会始终循环 } else { break; } } return cnt;}int main() { Stack stack; stack.push("Hello"); stack.push(" "); stack.push("World"); stack.push("Hello"); std::cout << "Find Hello : " << stack.find("Hello") << std::endl; std::cout << "How many times about Hello :" << stack.count("Hello") << std::endl; while (!stack.empty()) { std::string str; stack.pop(str); std::cout << str << std::endl; } return 0;}