【发布时间】:2017-03-03 03:00:36
【问题描述】:
我正在尝试创建一个程序来帮助用户创建从任何整数开始的数组索引。 它还应该在执行/访问越界的数组组件期间通知用户。
这是我目前所拥有的。
#include <iostream>
using namespace std;
int main(){
class safeArray;
};
const int CAPACITY=5;
我已将数组的容量设置为 5,因此可以有一个限制。让用户能够越界。
class safeArray() {
userArray= new int [CAPACITY];
用户将能够为数组中的每个槽创建一个新的 int 值。
cout <<"Enter any integers for your safe userArray:";
if (int=0;i<CAPACITY;i++) {
cout<<"You are in-bounds!";
}
else (int=0;i>CAPACITY;i++){
cout<<"You are OUT-OF-BOUNDS!";
cout<<endl;
return 0;
};
我使用 if-else 语句来检查数组下标? 我是 C++ 新手,所以任何关于如何简化它的错误或方法的澄清都会有所帮助。 谢谢。
【问题讨论】:
-
你很幸运。 C++ 已经有一个带有边界检查的数组对象,它被称为
std::vector,如果索引超出范围,它的at()方法将抛出异常。将其子类化并重载[]运算符以调用at()将是一件简单的事情。迄今为止,子类化和运算符重载并不是“C++ 新手”可能学到的东西。所以,继续阅读你的 C++ 书籍,最终你会到达那里。 -
当您事先知道数组的大小时,最好使用
std::array,当索引超出范围时,std::array::at方法将抛出std::out_of_range。 -
固定大小的 std::array
也有与使用 at() 相同的边界检查。 en.cppreference.com/w/cpp/container/array/at -
@SamVarshavchik - 不要迂腐,但包装
std::vector可能会更好。不推荐使用 STL 容器类作为基础,因为 dtor 不是虚拟的。就个人而言,我只是使用香草std::vector来满足 OP 似乎想要的,但是...... :)