使用堆栈进行工作(代码不是我的)
我有这样的代码:
class stack {
private:
int size;
int* data;
// what next line mean?
size_t ptr;
public:
stack(int valid_stack_size) {
this->size = valid_stack_size;
this->ptr = 0;
this->data = new int[valid_stack_size];
}
void push(int value) {
if (this->ptr >= (size_t)this->size)
cout << "Stack is full" << endl;
this->data[this->ptr++] = value;
}
int pop() {
if (this->ptr == 0)
cout << "Stack is empty" << endl;
return this->data[--this->ptr];
}
};
size_t ptr是什么意思? size_t需要ptr值吗?或?
答案 0 :(得分:2)
size_t
是一种类型 - 在头文件cstddef
中定义为一种类型,可以保存对象的最大大小。在现代系统中,它通常与指针的大小相等,而且通常是64位(8字节)。但是,标准不要求这样做。
结果,这一行声明了ptr
类型的变量size_t
,这令人困惑 - ptr
作为名称建议变量类型应该是一个指针。
在旁注中,此代码显示未定义的行为 - 在空堆栈上弹出或推入完整的代码时。
答案 1 :(得分:2)
size_t
是实现定义的无符号整数类型。
例如,size_t
可以通过以下方式定义
typedef unsigned long size_t;
根据此定义size_t
是unsigned long
类型的别名。
来自C标准(7.19通用定义<stddef.h>
)
<强>为size_t 强> 这是sizeof运算符的结果的无符号整数类型;
或者在C ++标准中有写(18.2类型)
6类型size_t是实现定义的无符号整数类型 它足够大,可以包含任何对象的字节大小。
在C ++中,size_t
(在标题<cstddef>
中声明)的定义也放在名称空间std
中。所以你也可以写
std::size_t ptr;
因此这行代码
size_t ptr;
表示标识符ptr
的声明,用于确定堆栈中当前位置的类型size_t
,而unsigned long int
更常被定义为ptr
。
对于您显示的代码,名称pos
对于标量整数对象不是很好。最好将它命名为例如{{1}}(单词“position”的缩写)