6-7 安全数组

实现一个安全数组类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中的所有元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值