Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

Массив: Что быстрее: mass[n] или *(mass+n)? - C++

10.07.2012, 14:58. Просмотров 2054. Ответов 51
Метки нет (Все метки)

Что быстрее: mass[n] или *(mass+n) и стоит ли заморачиваться по этому поводу?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 14:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив: Что быстрее: mass[n] или *(mass+n)? (C++):

динамичекий двумерный мас type *mass - C++
здрасти товарищи кодеры, нужны вашы знания в созданиях двумерного массива, но есть условие, создавать не как обычно type **mass ,а...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

Что быстрее массив или файл - C++
Привет! Я тут занялся обработкой содержимого текстовых файлов для этого пишу класс отслеживающий положение курсора в файле (типа номер...

Программа выдает ошибку при выводе структуры в функции Vyvod(int N, struct vehicle*mass) - C++
#include<iostream> #include<cstdio> #include<cstdlib> #include<fstream> #include <iomanip> using namespace std; struct...

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Что быстрее assembler или c++ - C++
Вопрос от новичка. Что будет быстрее по скорости выполнения и на сколько: 1) сложить a+b на C++ или на assembler 2) умножить a*b на C++...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,674
Записей в блоге: 17
10.07.2012, 20:49 #16
ForEveR, ну в принципе да.

-=ЮрА=- а если использовать пользователький тип?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
10.07.2012, 20:51 #17
Avazart, Объясни мне в чем разница. Массив он и в африке массив. А вот если использовать пользовательский тип контейнера - это уже другой разговор.
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2012, 20:57 #18
Avazart, я всё показал с асмом и прочим, для контейнеров(ты их подразумеваешь?) надо смотреть (я их вообще стараюсь кроме string не использовать - не вижу никаких преимуществ: в любом контейнере скорость доступа к элементу ниже чем скорость доступа к идентичному элементу в массиве того же размера. Так накой чёрт юзать чьи-то там писанные алгоритмы, если я и сам себе контейнер при желании с на много шире функционалом напишу). Пусть ТС уточнит что он рассматривает - контейнеры с итераторами или банальные массивы.
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
10.07.2012, 20:58 #19
-=ЮрА=-,
в любом контейнере скорость доступа к элементу ниже чем скорость доступа к идентичному элементу в массиве того же размера.
Не соглашусь. Если нету проверки на индекс, если итераторы реализованы через указатель, если включены оптимизации - скорость будет одинаковой.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
10.07.2012, 20:59 #20
Цитата Сообщение от ForEveR Посмотреть сообщение
Avazart, Объясни мне в чем разница. Массив он и в африке массив. А вот если использовать пользовательский тип контейнера - это уже другой разговор.
ну при желании кто-нибудь для класса может перегрузить
operator[](int)
operator+(int)
operator*()

но тут уже нет вопроса быстродействия - здесь будут совершенно разные методы/функции вызываться
0
-=ЮрА=-
10.07.2012, 21:00
  #21

Не по теме:

PS:Avazart, а если писать на С++ или паскале где быстрей будет доступ, аесли в шарпе. а где быстрей вообще работает индексации на NT или UNIX, давай глобализируем задачу и уйдём в дебри Не заморачивай голову...

0
Evg
Эксперт CАвтор FAQ
17826 / 6036 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 26
10.07.2012, 21:03 #22
Цитата Сообщение от Avazart Посмотреть сообщение
а если использовать пользователький тип?
Если ты имеешь в виду самодельную реализацию операторов, то программист всегда же может всё сделать через ж...у и оно будет заведомо не одинаковым

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Оба варианта индексации идентичны в плане быстродействия, т.к. идентичны асмы для какждого варинта индексации
"Т.к. идентичны асмы" - это следствие. А причина - "т.к. это следует из стандарта языка Си\Си++ и определения оператора []" (разумеется, без учёта возможной кривой перегрузки)
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
10.07.2012, 21:03 #23
alex_x_x, Ну, допустим, перегрузили, т.е.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct some
{
   int value;
};
 
some operator +(const some&, int)
{
    return some();
}
 
int main()
{
   some array[5];
   (*(array + 1)).value = 0;
}
массив ведь он и в африке массив, наши операторы вызваны не будут.
1
Evg
Эксперт CАвтор FAQ
17826 / 6036 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 26
10.07.2012, 21:04 #24
Цитата Сообщение от ForEveR Посмотреть сообщение
массив ведь он и в африке массив, наши операторы вызваны не будут
А оператор можно перегрузить только для класса, ноне для указателя на класс?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
10.07.2012, 21:06 #25
Evg, Один параметр точно должен быть объектом класса (значением, ссылкой), но не указателем.
http://liveworkspace.org/code/513c85...b1d55c72126db3
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2012, 21:07 #26
Цитата Сообщение от ForEveR Посмотреть сообщение
Не соглашусь. Если нету проверки на индекс, если итераторы реализованы через указатель, если включены оптимизации - скорость будет одинаковой.
- возможно я несколько некорректно выразился, т.е. если имеем класс
C++
1
2
3
4
5
6
7
8
9
class userType
{
private:
    char *str;
public:
    userType(char * _str){_str = str;}
    char Get(int index){return str[index];}
    char * Mem(){return str;};
};
То да скорость индексации будет одинаковой, но т.к. в реалии классы мы пишем сложнее а перегрузить оператор [] тоже надо то думаю код асма для самописного контейнера выйдет всё же подлинней. В любом случае для простых массивом скорости доступа одинаковы, как я уже писал.
0
Evg
Эксперт CАвтор FAQ
17826 / 6036 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 26
10.07.2012, 21:10 #27
Цитата Сообщение от ForEveR Посмотреть сообщение
Evg, Один параметр точно должен быть объектом класса (значением, ссылкой), но не указателем
В итоге получается, что при работе с массивом мы никогда не попадём ни в перегруженный оператор +, ни в перегруженный оператор []?
0
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
10.07.2012, 21:11 #28
Ребят а через указатель доступ будит быстрее ?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
10.07.2012, 21:12 #29
Evg, С нативным массивом - да. Если класс контейнер, он уже не является массивом.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
10.07.2012, 21:15 #30
Перегруженный оператор для объекта массива можно будет вызвать так:
some_class array[ 6 ];

array[ 6 ][ 0 ] = 1;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2012, 21:15
Привет! Вот еще темы с ответами:

Что быстрее списки или вектор ? - C++
Всем привет. Делаю приложение и очень важна скорость обработки данных, а нужно хранить динамические массивы. В каком формате будет...

If или switch().case. Что быстрее - C++
Есть два кода. Первый: if(a == 2) a += 2; if(a == 3) a+= 3; if(a == 4) a+=4; Второй:

Деление с остатком или маска, что быстрее? - C++
Всем известно, что побитовый сдвиг (<<, >>) выполняется быстрее деления на два. Деление целых на 2 через битовый сдвиг - архаизм? и...

Что быстрее - двоичный или текстовый файл? - C++
Встал вопрос о времени чтения данных с диска, посему нужно выбрать быстрейший из этих двух способов хранения данных на внешнем носителе. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2012, 21:15
Ответ Создать тему
Опции темы

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