for循环中的C++后缀增量;堆叠;组成/授权
C++ postfix incrementation in a for loop; stacks; composition/delegation
我搜索了类似的问题,但找不到适用于我的情况的问题。我有一个使用数组类作为数据成员的堆栈类。我在大小为5的堆栈(在本例中为数据成员"Array m_Array")上使用"main()"中的推送和弹出来测试它。我使用for循环来用后缀增量填充堆栈,但它没有将0推入第一个元素,而是将1推入。我的输出是:
1
2
3
4
3
2
1
0
-1
Stack is full(empty)
但我希望它是
0
1
2
3...
测试中:
int main()
{
try {
Stack<int> s(5);
for (int i = 0; i < 4; i++) {
s.Push(i);
cout << s << endl;
}
cout << endl;
for (int i = 0; i < 8; ++i) {
s.Pop();
cout << s << endl;
}
}
catch (ArrayException &ex) //catch object
{
cout << ex.GetMessage() << endl;
}
catch(...) //default catch
{
cout << "An unhandled exception has occurred" << endl;
}
return 0;
}
在stack.cpp中:
#ifndef STACK_CPP
#define STACK_CPP
#include "stack.h"
namespace Jules
{
namespace Containers
{
template<typename T> //default constructor
Stack<T>::Stack() : m_array(Array<T>()), m_current(0)
{
}
template<typename T> //destructor
Stack<T>::~Stack()
{
}
template<typename T> //copy constructor
Stack<T>::Stack(const Stack<T> &s) : m_array(s.m_array), m_current(s.m_current)
{
}
template<typename T> //constructor with input argument
Stack<T>::Stack(const int i) : m_array(i), m_current(0)
{
}
template<typename T> //assignment operator
Stack<T> Stack<T>::operator=(Stack<T> const &source)
{
if (this == &source)
return *this;
Stack<T>::operator = (source);
return *this;
}
template<typename T> //push function
void Stack<T>::Push(const T& element)
{
m_array[m_current] = element;
++m_current;
}
template<typename T> //pop function
void Stack<T>::Pop()
{
--m_current;
m_array[m_current];
}
template<typename T2> //send to ostream
ostream& operator << (ostream& os, const Stack<T2>& t)
{
os << t.m_current;
return os;
}
}
}
#endif
operator <<
的代码只打印堆栈的大小。因此,您没有看到打印的任何堆栈值,只有大小。你只是运气不好,堆栈的大小与你推到它上的值如此紧密地相关
你希望operator <<
做什么?也许它应该迭代堆栈内容并将它们全部打印出来?也许它应该在堆栈大小之前说"堆栈大小:",那么这将是显而易见的。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 构建一个由C和C++文件组成的库
- boost::spirit::karma 替代生成器,带有 boost::variant 由字符串和字符串别名组成
- 为什么在C++中对链表这样做?(像堆叠一样处理它们)
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 如果 x.h 仅由函数声明组成,为什么有必要在 x 中包含 x.h.cpp
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- C++17 折语法测试矢量组成
- 堆叠协程 + gdb = "previous frame inner to this frame (corrupt stack)?"
- 如何声明二维矢量由二维矢量组成?
- 在编译时而不是运行时创建一个由两个字节组成的值
- 瓦尔格林德错误 - 地址0x0不是堆叠的 malloc'd 或自由的
- 我有一个嵌套数组,它由另一个数组中的元素组成,这些元素分组为2.之后,我想显示每个元素的属性
- 我想创建一个嵌套数组,该数组由另一个数组中的所有元素组成,但分为两个
- 特征垂直堆叠行到矩阵中
- 计算表达式字符串由 std::map 中的键组成
- Qt小部件将子布局堆叠在彼此之上
- for循环中的C++后缀增量;堆叠;组成/授权