RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 717616
Accepted
Cus
Cus
Asked:2020-09-13 01:59:08 +0000 UTC2020-09-13 01:59:08 +0000 UTC 2020-09-13 01:59:08 +0000 UTC

没有溢出的数组 C++

  • 772

我需要一个没有溢出的数组或向量。这是什么?假设我创建了一个包含 10 个 int 类型字符的向量或数组,当我采用 a[0],a[4],a[9] == 10; 时,所有 10 个元素都等于 10;但如何做到这一点

a[10 (это 0) ] == 10 
a[12 (это 2) ] == 10

最好也用于负数

c++
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Mirdin
    2020-09-13T02:48:44Z2020-09-13T02:48:44Z

    创建自己的类并在其中重载operator[](我将在此处作为模板进行):

    template <typename T>
    class Array
    {
    private:
        T *arr;
        int size;
    
    public:
        Array(uint _size = 10); //по умолчанию размер массива = 10;
        ~Array();
        T& operator[](uint index);
    }
    
    template <typename T>
    Array<T>::Array(uint _size)
    {
        if (_size == 0) { _size = 1; }
        arr = new T[_size];
    }
    
    template <typename T>
    Array<T>::~Array()
    {
        delete [] arr;
    }
    
    template <typename T>
    T& Array<T>::operator[](uint _index)
    {
        _index %= size;
        return arr[_index];
    }
    

    NB可能是我哪里搞砸了,因为好久没写pros了,不过原理应该很清楚了。

    • 5
  2. Best Answer
    tilin
    2020-09-13T14:35:02Z2020-09-13T14:35:02Z

    如果问题是如何获得不超出负索引数组的索引,那么您可以像这样计算数组索引:

    i < 0 ? -i%10 : i % 10
    

    例如:

    #include <iostream>
    using namespace std;
    
    
    
    int main() {
        int a[10] = {1,2,3,4,5,6,7,8,9,10};
    
        for(int i=-12; i<12; ++i){
            cout << "a[" << i << "] = " << a[i < 0 ? -i%10 : i % 10] << endl;
        }
        return 0;
    }
    

    输出将是:

    a[-12] = 3
    a[-11] = 2
    a[-10] = 1
    a[-9] = 10
    a[-8] = 9
    a[-7] = 8
    a[-6] = 7
    a[-5] = 6
    a[-4] = 5
    a[-3] = 4
    a[-2] = 3
    a[-1] = 2
    a[0] = 1
    a[1] = 2
    a[2] = 3
    a[3] = 4
    a[4] = 5
    a[5] = 6
    a[6] = 7
    a[7] = 8
    a[8] = 9
    a[9] = 10
    a[10] = 1
    a[11] = 2
    
    • 1
  3. Шерзод Ёров
    2020-09-13T02:29:44Z2020-09-13T02:29:44Z

    一般来说,不建议超出分配的内存,可能会出现分段错误。您可以在这样的阵列上创建一个错觉,例如,创建一个将预先预订阵列中一定数量的位置的类。

    class SomeArrayInt {
        int *a;
        public SomeArrayInt() {
            a = new int[1000];
            n = 1000;
            for(size_t i = 0; i < n; i++)
                a[i] = 10;
        }  
        int operator[](int k) {
            if(n < k) {
               delete [] a; 
               a = new int[k];
               n = k; 
               for(size_t i = 0; i < n; i++) 
                   a[i] = 10; 
             }
             return a[k - 1];
        }
        ~SomeArrayInt() {
            delete [] a;
        }
    }
    

    也许我在线程中犯了一个错误,但理论上是这样的。

    • -2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5