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

Приоритет. Обращение к элементу по постинкременту. - C++

Восстановить пароль Регистрация
 
jimmyknife
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 19
27.03.2014, 09:47     Приоритет. Обращение к элементу по постинкременту. #1
C++
1
2
while(buffer[i] != ',' && buffer[i] != '\0')
        dest[j++]=buffer[i++];
Вот такой код, вопрос такой : сначала к j додается 1 или додается +1 после цикла?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 09:47     Приоритет. Обращение к элементу по постинкременту.
Посмотрите здесь:

C++ Обращение к определенному элементу списка.
Обращение к элементу массива C++
STL . Обращение к 12 элементу вектора C++
STL обращение к элементу vector C++
C++ Обращение к предпоследнему элементу vector
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
27.03.2014, 09:51     Приоритет. Обращение к элементу по постинкременту. #2
C++
1
dest[j++]
увеличивается значение на 1 сразу, но возвращается копия исходного j.
выглядела перегрузка бы примерно так:
C++
1
2
3
4
5
{
   int buf = x;
   x = x+1;
   return buf;
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
27.03.2014, 11:01     Приоритет. Обращение к элементу по постинкременту. #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от jimmyknife Посмотреть сообщение
dest[j++]
теория
j++ это постинкремент
++j это преинкремент

Сначала произойдет обращение к dest[j], а потом только значение j увеличится на единицу.
jimmyknife
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 19
27.03.2014, 20:59  [ТС]     Приоритет. Обращение к элементу по постинкременту. #4
но если, припустим, в цикле там for(int i=0;i<12;i++), там где i++ нету разницы, пост- или преинкремент, верно?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
27.03.2014, 21:26     Приоритет. Обращение к элементу по постинкременту. #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
jimmyknife, i++ или ++i будут в любом случае выполнятся в конце цикла. Ну лучше использовать ++i т.к. быстрее, потому что не создается дополнительной переменной (buf из второго поста).
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
28.03.2014, 12:11     Приоритет. Обращение к элементу по постинкременту. #6
Цитата Сообщение от dimcoder Посмотреть сообщение
Ну лучше использовать ++i т.к. быстрее, потому что не создается дополнительной переменной
Для целочисленного типа в принципе не имеет значения. А вот для каких-нибудь мощных контейнеров или пользовательских типов да.

Чтобы не быть голословным прибегну опять к своим любимым картинкам:
Но сначала код
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
using namespace std;
 
class Count
{
public:
        int i;
 
        Count():i(0)
          {cout << "Constructor void \t" << this << endl;}
        Count( int i_ ):i( i_ )
          {cout << "Constructor int \t" << this << endl;}
        Count( const Count &c )
          {
          this->i = c.i;
          cout << "Constructor copy \t" << this << endl;
          }
 
        ~Count()
          {cout << "Destructor \t\t" << this << endl;}
 
 
        Count &operator = ( const Count &current )
          {
          cout << "=\t\t\t" << this << endl;
 
          if( this == &current )
            return *this;
 
          this->i = current.i;
          return *this;
          }
 
 
        friend const Count &operator ++ ( Count &current );      // Пре
        friend const Count operator ++ ( Count &current, int ); // Пост
};
const Count &operator ++ ( Count &current ) // Пре
{
  cout << "++i\t\t\t" << &current  << endl;
 
  current.i = current.i + 1;
  return current;
}
const Count operator ++ ( Count &current, int ) // Пост
{
  cout << "i++\t\t\t" << &current  << endl;
 
  Count notIncrementCount( current.i );
  current.i = current.i + 1;
  return notIncrementCount;
}
 
int main()
{
{
for( Count count=0; count.i<2; count++ )
  {
  cout << "loop count++" << endl;
  }
}
cout << endl;
{
for( Count count=0; count.i<2; ++count )
  {
  cout << "loop ++count" << endl;
  }
}
cin.ignore();
return 0;
}

Приоритет. Обращение к элементу по постинкременту.

Как можно, посадив зрение, разглядеть на картинке, при одинаковых количествах итераций, для постинкремента выполняется гораздо больше операций, чем для преинкремента. Особенно если учесть, что в конструкторах может быть какое-нибудь громоздкое обращение к файлу (по сети(с того света)) или выделение просто ниемоверного количества памяти, что приведет к таким жутким последствиям, что уничтожение Сирии Рамсесом вторым покажется мелкой неприятностью.
Но для простого int заморачиваться не стоит. Тем более, что компилятор скорее всего и сам все это оптимизирует.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 18:00     Приоритет. Обращение к элементу по постинкременту.
Еще ссылки по теме:

C++ Обращение к следующему элементу в for-each цикле
Обращение к элементу матрицы C++
C++ Что быстрее? Обращение к элементу массива или к элементу структуры?

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

Или воспользуйтесь поиском по форуму:
jimmyknife
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 19
31.03.2014, 18:00  [ТС]     Приоритет. Обращение к элементу по постинкременту. #7
Большое спасибо за такой обширный ответ, но я пока, к сожалению, классы не учил, так что толком код не понимаю, скрины сохраню на будущее
Yandex
Объявления
31.03.2014, 18:00     Приоритет. Обращение к элементу по постинкременту.
Ответ Создать тему
Опции темы

Текущее время: 14:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru