实现一个安全数组类Int
该数组类在发现数组范围访问越界时会结束程序运行,并报错“内存访问”越界。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include<iostream>
using namespace std;
/* 请在这里填写答案 */
int main(){
int n,m,i;
cin>>n>>m;
Int a(n),b; //定义数组a内有n个元素, b数组内有1个元素
cin>>a; //任意输入n个整数元素
a.sort(); //a数组排序
b = a; //拷贝数组
for(i=0;i<m;i++) //输出数组b中前m个数
cout<<b[i]<<" ";
}
输入样例:
第一行输入2个整数n、m,定义数组a的大小为n个元素;第二行则输入n个任意的整数到数组a中
在这里给出一组输入。例如:
3 3
3 2 1
输出样例:
经过排序后,输出数组b中前m个元素
在这里给出相应的输出。例如:
1 2 3
输入样例:
第一行输入2个整数n、m,定义数组a的大小为n个元素,经过排序后,输出数组b中前m个元素
在这里给出一组输入。例如:
5 6
3 2 5 6 8
输出样例:
在这里给出相应的输出。例如:
2 3 5 6 8 内存访问越界
运行代码如下:
#include <vector>
#include <algorithm>
class Int {
public:
Int(int size = 0) : data(size) {}
int& operator[](int index) {
if (index < 0 || index >= data.size()) {
throw std::out_of_range("Index out of bounds");
}
return data[index];
}
const int& operator[](int index) const {
if (index < 0 || static_cast<size_t>(index) >= data.size()) {
throw std::out_of_range("Index out of bounds");
}
return data[index];
}
friend istream& operator>>(std::istream& is, Int& arr) {
for (size_t i = 0; i < arr.data.size(); ++i) {
is >> arr.data[i];
}
return is;
}
void sort() {
std::sort(data.begin(), data.end());
}
private:
vector<int> data;
};
#include <vector>是C++中包含std::vector类的头文件。std::vector是C++标准库中的一个容器,它是一个动态数组,可以自动扩展容量以容纳更多的元素。它提供了许多方法来操作存储在其中的元素,例如push_back()(添加元素)、erase()(删除元素)、at()(访问元素)和size()(获取元素数量)等。通过包含#include <vector>头文件,我们可以在C++程序中使用std::vector类来创建动态数组,并对它进行各种操作。
“#include ”是C++中的一个预处理指令,意思是包含algorithm头文件。这个头文件包含了各种常用的算法,比如排序、查找、计算最大值和最小值等。这些算法都是以函数的形式定义在标准库中的。使用#include 可以让你在代码中使用这些算法,而不需要自己编写实现。例如,你可以使用std::sort函数来对一个数组进行排序,而不需要自己编写排序算法。
在上面的程序中,data.begin()是C++ STL(Standard Template Library)中vector类的成员函数,用于返回指向vector中第一个元素的迭代器。迭代器是一种指针,可以用来遍历容器中的元素。通过使用begin()函数,我们可以获取指向vector中第一个元素的迭代器,然后使用这个迭代器来遍历vector中的所有元素。
在上面的程序中,data.end()是C++ STL(Standard Template Library)中vector类的成员函数,用于返回指向vector最后一个元素后面的迭代器。这个迭代器可以用来遍历vector中的所有元素,包括最后一个元素后面的位置。通过使用end()函数,我们可以获取指向vector最后一个元素后面的迭代器,然后使用这个迭代器来遍历vector中的所有元素。