Прямой указатель на любой элемент с количеством элементов динамической длины без арифметики с указателем
Можно ли написать программу на 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]
Дело в том, что, как только вы определили свою ссылку, вы используете ее в точности как обычная переменная, разделяющая память массива. Но в какой-то момент вы должны использовать арифметику указателей, чтобы сообщить компилятору, на какой элемент массива вы хотите ссылаться.