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

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

Войти
Регистрация
Восстановить пароль
 
jimmyknife
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 19
#1

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

27.03.2014, 09:47. Просмотров 279. Ответов 6
Метки нет (Все метки)

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

Что быстрее? Обращение к элементу массива или к элементу структуры? - C++
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на...

Обращение к элементу массива - C++
Объясните пожалуйста, что происходит в строке помеченной *** void main(){ char str; char ptr; cin >> str; cout << ...

Обращение к элементу матрицы - C++
как зделать операцию A template <class T> class matrix{ T **mat; int n, m; public: matrix(int a, int b); void...

Обращение к элементу массива - C++
Как мне обратиться к последнему элементу массива? например: Array // i = 0 тут нужно что бы -1 был последним т.е N-1 //можно ли с...

Обращение к предпоследнему элементу vector - C++
Имееться vector заполненный числами. Мне надо вычислить разность между последним и предпоследним элемнтом vector. Для обращения к...

Обращение к следующему элементу в for-each цикле - C++
Как обратиться к следующему элементу for each цикла? Например, в цикле for (auto &el : text_vector) { if (el > следующий...

6
dimcoder
Полярный
466 / 438 / 68
Регистрация: 11.09.2011
Сообщений: 1,136
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;
}
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
27.03.2014, 11:01 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от jimmyknife Посмотреть сообщение
dest[j++]
теория
j++ это постинкремент
++j это преинкремент

Сначала произойдет обращение к dest[j], а потом только значение j увеличится на единицу.
1
jimmyknife
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 19
27.03.2014, 20:59  [ТС] #4
но если, припустим, в цикле там for(int i=0;i<12;i++), там где i++ нету разницы, пост- или преинкремент, верно?
0
dimcoder
Полярный
466 / 438 / 68
Регистрация: 11.09.2011
Сообщений: 1,136
27.03.2014, 21:26 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
jimmyknife, i++ или ++i будут в любом случае выполнятся в конце цикла. Ну лучше использовать ++i т.к. быстрее, потому что не создается дополнительной переменной (buf из второго поста).
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 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 заморачиваться не стоит. Тем более, что компилятор скорее всего и сам все это оптимизирует.
1
jimmyknife
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 19
31.03.2014, 18:00  [ТС] #7
Большое спасибо за такой обширный ответ, но я пока, к сожалению, классы не учил, так что толком код не понимаю, скрины сохраню на будущее
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 18:00
Привет! Вот еще темы с ответами:

STL обращение к элементу vector - C++
Помогите исправить ошибку. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class otschet { public: double...

Обращение к последнему элементу вектора - C++
Здравствуйте, мне нужно сравнить последний элемент вектора с числом и в зависимости от того, какое это число, выполнить дальнейшие...

Обращение к элементу массива из строк - C++
Здравствуйте! Имеется такой код: string mesiaci = //Massiv iz strok { &quot;Ianvar'&quot;, &quot;Fevral'&quot;, &quot;Mart&quot;, &quot;Aprel'&quot;, ...

STL . Обращение к 12 элементу вектора - C++
Добрый вечер, форумчане! Столкнулся вот с такой проблемой. Имеется вектор, заполненный числами, огромной длины. Но почему-то не хочет...


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

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

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