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



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

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

На этом все!


615   0  

Comments

    Ничего не найдено.