8 полезных приемов программирования на C++

19 May
452 full reads
700 story viewsUnique page visitors
452 read the story to the endThat's 65% of the total page views
3 minutes — average reading time

Источник: Nuances of Programming

1. Как включить все стандартные библиотеки одной командой

Чтобы разом включить в проект все стандартные библиотеки, используйте # include <bits/stdc++.h>. Это особенно полезно в условиях дефицита времени на соревнованиях по программированию.

Например, вы можете заменить этот фрагмент (и многие другие):

# include <iostream>
# include <algorithm>
# include <vector>
# include <string>
# include <stack>
# include <set>
# include <queue>
# include <map>

Простой строкой:

# include <bits/stdc++.h># include <bits/stdc++.h>

Но помните, что:

· <bits/stdc++.h содержит множество заголовочных файлов, которые, возможно, и не понадобятся в конкретном проекте. А это может привести к увеличению времени компиляции.

· <bits/stdc++.h> не является стандартным заголовочным файлом библиотеки GNU C++. Таким образом, не относящиеся к типу GCC (GNU Compiler Collection) компиляторы могут испытывать затруднения в процессе исполнения. Однако так бывает не часто!

2. Используйте auto, чтобы опустить тип данных переменной

Опустить тип данных переменной можно, используя ключевое слово auto в 11-й и в более поздних версиях C++. Это чрезвычайно полезно в случае, когда нужно объявить переменную во время выполнения, например, при использовании итераторов.

В качестве простого примера объявим типы данных следующих переменных:

auto a = 'a';
auto t = true;
auto x = 1;
auto y = 2.0;

3. Комплексные циклы for на основе диапазона

Цикл for на основе диапазона  —  это представленный в 11-й версии C++ обновленный вариант традиционного цикла for.

Синтаксис цикла for на основе диапазона:

for(range_declaration : range_expression)

Например, можно перебрать с помощью цикла for на основе диапазона массив чисел следующим образом:

int numbers[] = {1,2,3,4,5};

for (auto number: numbers){
cout << number << endl;
}

Также можно аналогичным образом перебирать символы в строке:

string name = "Charlie";

for (auto character: name){
cout << character << endl;
}

4. Операторы One Liner, If… Else

Операторы if … else можно легко преобразовать в однострочные, используя тернарный оператор (известный также как условный оператор).

В качестве примера можно заменить это простое выражение:

int age = 9;

if(age < 18) {
printf("A Child");
}
else {
printf("An Adult");
}

такой более аккуратной записью:

age < 18 ? printf("A Child") : printf("An Adult");

Общий синтаксис тернарного оператора:

condition ? true_expression : false_expression

Тернарный оператор широко используется и в других языках программирования, не только в C++.

Стоит учитывать, что чрезмерное использование тернарных операторов способно затруднить чтение кода программы. Их полезно использовать только тогда, когда оператор if … else достаточно прост для восприятия в виде однострочного троичного выражения.

5. Поменять местами две переменные без использования третьей

Оператор XOR можно использовать для обмена местами двух переменных без использования третьей вспомогательной переменной. Вот пример:

int a = 1;
int b = 2;

a ^= b ^= a ^= b;

6. Оператор →

“Оператор” -> можно использовать в цикле while в качестве условия перехода. Например, с его помощью можно напечатать числа 9 8 7 6 5 4 3 2 1 следующим образом:

int x = 10;

while( x --> 0 ) {
printf("%d ", x);
}

Примечание: ->  —  это на самом деле не оператор, а комбинация из двух операторов — -и >. Приведенное выше while  —  это то же самое, что и while ((x — )> 0), которое читается как «уменьшить x на 1, а затем сравнить результат с 0».

7. Преинкремент выполняется быстрее, чем пост-инкремент

В C++ есть два оператора, которые можно использовать для увеличения значения на 1:

· Предварительный инкремент (pre-increment) ++i  —  перед присвоением переменной значения оно увеличивается на единицу.

· Последующий инкремент (post-increment) i++  —  после присвоения переменной значения оно увеличивается на единицу.

В результате преинкремент ( ++i) работает быстрее постинкремента, потому что последний сохраняет копию предыдущего значения, а преинкремент непосредственно добавляет 1 без копирования предыдущего значения.

8. Комбинируйте присвоение с вызовом функции

C ++ позволяет комбинировать присвоение и вызов функции. Например, имеем:

int i;

i = 10;
printf("%d", i); // печать 10

Несколько упростить код программы можно следующим образом:

int i;

printf("%d", i = 10); // печать 10

На этом все!

Читайте также:

Читайте нас в TelegramVK

Перевод статьи Artturi Jalli: 8 Neat C++ Programming Tricks You Should Know