Прямой указатель на любой элемент с количеством элементов динамической длины без арифметики с указателем

Можно ли написать программу на C++, которая выделяет введенное пользователем количество элементов и дает им введенные пользователем значения, а затем может указывать непосредственно на любой элемент из только что выделенных, без необходимости использовать арифметику указателей? Я спрашиваю об этом, потому что человеческий мозг не думает, что "7-й элемент - это адрес первого элемента + 6 шагов впереди"; он может абсолютно связывать динамически созданные элементы и его текущий набор свойств. Если это возможно в C++, это, естественно, ускорит выполнение программы.

Пример кода, чтобы уточнить, что я имею в виду:

//
//  main.cpp
//  This code doesn't compile
//  but it's for clarification purposes
//  Created by Måns Nilsson on 2017-01-02.
//  Copyright © 2017 Måns Nilsson. All rights reserved.
//

#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {
    int currval;
    int otherval;
    int arrlength;
    cout<<"How many elements would you like to allocate?"<<endl<<"Your input: ";
    cin >> arrlength;
    int numlist[arrlength];

    //User inputs the element values and variables are assigned to
    //point directly to each element
    for(int i=0;i<arrlength;i++) {
        cout<<"Enter a value for element "<<(i + 1)<<": ";
        cin >> currval;
        numlist[i] = currval;
        int &var(i) = numlist[i];
    }

        cout<<"Enter the index of the element you want to modify: ";
        cin >> currval;
        cout<<"Enter a new value for element "<<currval<<": ";
        cin >> otherval;
        var(currval-1) = otherval;

    return 0;
}

1 ответ

C++ позволяет установить ссылку на элемент во вновь выделенном массиве:

int *arr = new int[10];
int &elt6 = arr[6];
...
elt6 = 12; // actually sets arr[6]

Дело в том, что, как только вы определили свою ссылку, вы используете ее в точности как обычная переменная, разделяющая память массива. Но в какой-то момент вы должны использовать арифметику указателей, чтобы сообщить компилятору, на какой элемент массива вы хотите ссылаться.

Другие вопросы по тегам