Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
_20_
12 / 11 / 5
Регистрация: 29.09.2011
Сообщений: 282
1

Нумерация массива с произвольного числа

09.05.2015, 02:18. Просмотров 1170. Ответов 4
Метки нет (Все метки)

Возможно ли как - нибудь объяснить компилятору, что нумеровать новый массив надо не с нуля, а с произвольного числа, причём это число не известно на этапе компиляции? Например не с 0 до 20, а с 1000 до 1020.

Скорость выполнения очень критична. То есть при каждом обращении сдвигать индексы не хорошо.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2015, 02:18
Ответы с готовыми решениями:

Корень произвольного степени из произвольного числа, введенного с клавиатуры
Не применяя встроенных функций, найти корень произвольного степени из произвольного числа,...

создать шаблон класса,реализующий буфер из произвольного (5) числа вещественных чисел. Числа ввести с клавиатуры содержащие буфера вывести на экран
Помогите, пожалуйста.

Разрядность(нумерация) элементов числа
Я написал такую вот прогу: #include<iostream> using namespace std; void main() { int a=0, i,...

Нумерация массива
Как провести нумерацию вектора и двумерного массива не с нуля а с единицы. Подскажите пожалуйста.

нумерация массива
как изменить нумерацию элементов одномерного массива...чтобы первому элементу был присвоен номер 1,...

4
nmcf
6532 / 5756 / 2621
Регистрация: 14.04.2014
Сообщений: 24,492
09.05.2015, 08:37 2
Компилятору нельзя объяснить.
Индексы в любом случае используются, что там особенно замедлится?
0
zss
Модератор
Эксперт С++
8502 / 7497 / 4640
Регистрация: 18.12.2011
Сообщений: 19,842
Завершенные тесты: 1
09.05.2015, 08:44 3
Передавайте вместо индекса указатель на элемент, который считаете началом массива
C++
1
2
3
4
5
6
7
8
9
10
int f(int *p)
{
   int result=1;
   for(int *pt=p;pt<p+20;pt++)
      result*=*pt;
   return result; // Получили произведение 20 элементов массива начиная с адреса p.
}
...
int x[2000];
int k=f(x+1000);
0
nmcf
6532 / 5756 / 2621
Регистрация: 14.04.2014
Сообщений: 24,492
09.05.2015, 09:12 4
zss, ты предлагаешь массив "с запасом" объявить, что ли?
0
Eva Rosalene
Ladybug
4124 / 1598 / 304
Регистрация: 06.01.2013
Сообщений: 4,193
Завершенные тесты: 2
09.05.2015, 11:02 5
Лучший ответ Сообщение было отмечено _20_ как решение

Решение

Ну можно сэмулировать массив. Но, казалось бы, зачем -_-
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
template <class T>
class MyArray {
    T *arr;
    size_t start, len;
    public:
        MyArray(int length, size_t start = 0) : arr(new T[length]), start(start), len(length) {}
        MyArray(const MyArray& ref) {
            arr = new T[ref.length()];
            start = ref.first_index();
            len = ref.length();
            
            for (int i = start; i < ref.last_index(); ++i)
                arr[i - start] = ref[i];
        }
        
        ~MyArray() {
            delete[] arr;
        }
        
        MyArray& operator = (const MyArray& ref) {
            delete[] arr;
            arr = new T[ref.length()];
            start = ref.first_index();
            len = ref.length();
            
            for (int i = start; i < ref.last_index(); ++i)
                arr[i - start] = ref[i];
        }
        
        T& operator [] (int index) {
            return arr[index - start];
        }
        
        size_t length () const {
            return len;
        }
        
        size_t first_index () const {
            return start;
        }
        
        size_t last_index () const {
            return start + len;
        }
};
Добавлено через 7 минут
Цитата Сообщение от _20_ Посмотреть сообщение
при каждом обращении сдвигать индексы не хорошо.
Он так или иначе преобразует форму
C++
1
arr[10];
в
C++
1
*(arr + 10)
В случае со сдвигом будет
C++
1
*(arr + 10 + index);
На одну операцию больше - для процессора это пшик, миллиардные доли секунды.

Цитата Сообщение от _20_ Посмотреть сообщение
Скорость выполнения очень критична. То есть при каждом обращении сдвигать индексы не хорошо.
Цитата Сообщение от nmcf Посмотреть сообщение
Компилятору нельзя объяснить.
Компилятор сам соптимизирует то, что ему покажется нужным.
1
09.05.2015, 11:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2015, 11:02

Нумерация элементов массива
Что сделать, чтобы в конце элементы массива были пронумерованы. ...

Последняя цифра произвольного числа
Нужно найти последнюю цифру произвольного числа a. Пример 2485 5 -93918 8

Вычислить квадратный корень из произвольного числа
Вычислить квадратный корень из произвольного числа, используя метод Ньютона (yn=(yn-1+a/yn-1)/2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru