Источник: 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
На этом все!
Читайте также:
Перевод статьи Artturi Jalli: 8 Neat C++ Programming Tricks You Should Know