Библиотека stl: введение. Стандартная библиотека шаблонов в С++

Библиотека stl: введение. Стандартная библиотека шаблонов в С++

Всем привет! В этой статье мы начнем изучать стандартную библиотеку С++, которая называется stl. Если вдруг кто-то не знает, что такое библиотека. Библиотека это обычный набор различных классов, алгоритмов, структур данных, методов и так далее, которые уже написаны за вас. То есть, например, вам не нужно реализовывать собственные классы стека или кучи, вам не нужно писать собственные алгоритмы бинарного поиска, сортировок и так далее. Этими алгоритмами вы сможете воспользоваться из стандартной библиотеки. Все они были написаны уже давным-давно и за вас. То есть вы можете спокойно сэкономить свое время воспользовавшись стандартными алгоритмами. Библиотек для С++ существует достаточно много, так как это известный и широко используемый язык. Самая начальная библиотека это естественно библиотека STL, то есть стандартная библиотека которая уже вшита в большинство версий С++. То есть вам не нужно ничего скачивать эта библиотека будет уже у вас – в вашей IDE или компиляторе. Также существуют такие библиотеки, которые называются boost и QT – это уже сторонние библиотеки, которые мы будем изучать чуть позже, но пока давайте разбираться что такое STL и из чего она состоит, и как с ней взаимодействовать. В STL существуют следующие три основные сущности: контейнеры, итераторы и алгоритмы. Контейнеры, если сказать упрощенно, то это обыкновенные классы, но необычные, а шаблонные классы, то есть которым мы можем передать те типы, с которыми мы хотим работать. Надеюсь, что все понимают, что такое шаблонные классы, если же кто-то еще этого не знает, то советую посмотреть статью по шаблонным классам в С++. Для работы с этими классами мы тоже можем написать собственный алгоритм, например, сортировка контейнера вектор. Вектор это подобие массива, если не вдаваться в подробности, позже я обезательно расскажу...
Использование контейнера map c++

Использование контейнера map c++

Что такое контейнер map в С++ и когда необходимо его использовать При использовании массива строк в C++, каждой строке ставится в соответствие цифра(индекс массива). Но, что делать в случае когда требуется установить соответствие между именами и номерами телефонов(задача о хранении телефонного справочника). В этом случае с массивами увы такого не провернешь. И поэтому стоит обратить внимание на контейнер map в c++. Map в c++, которую также называют ассоциативным массивом, позволяет устанавливать соответствие между двумя элементами любого типа, первый из которых называют ключом(key), а второй значением(value). Стоит запомнить, что в c++ map все ключи являются уникальными! В случае же если в структуре данных могут находится дублирующие ключи стоит использовать multimap. О multimap поговорим в другой статье. Простой пример использования map в c++ C++ #include <iostream> #include <map> #include <string> using namespace std; int main () { // следующая строка создает соответствие между // двумя строками: именем владельца и маркой его машины map<string,string> nameToCar; nameToCar["Ivan"]="BMW"; nameToCar["Alex"]="Honda"; cout << "Ivan`s car is a " << nameToCar["Ivan"] << endl; cout << "Alex`s car is a " << nameToCar["Alex"] << endl; } 123456789101112131415161718 #include <iostream>#include <map>#include <string> using namespace std; int main (){  // следующая строка создает соответствие между   // двумя строками: именем владельца и маркой его машины  map<string,string> nameToCar;   nameToCar["Ivan"]="BMW";  nameToCar["Alex"]="Honda";   cout << "Ivan`s car is a " << nameToCar["Ivan"] << endl;  cout << "Alex`s car is a " << nameToCar["Alex"] << endl;}   Стоит отметить, что как и другие контейнеры, map в c++ располагает следующими методами: size, begin и end. Давайте рассмотрим еще один пример. Нижеприведенный код делает часточный подсчет каждого символа в строке и выводит частоту употребления каждого символа. При итерации по map в с++ крайне удобно использовать...

Разница между final и effectively final в Java

После выпуска новой редакции Java 8 вместе с lambda-выражениями в Java также было добавлено новое понятие effectively final. С технической стороны вопроса нет никакой разницы между final и effectively final. Что такое модикатор final в Java? Любая переменная с модификатором доступа final не подлежит какому-либо изменению. Что такое effectively final в Java? Любая переменная, находящаяся снаружи lambda-выражения и проинициализированная единожды в локальной области видимости(в методе), является effectively final переменной и может быть использована в lambda-выражениях. Effectively final переменная очень похожа на final переменную, с единственным отличием: нет необходимости использовать модификатор final при объявлении переменной. Пример effectively final переменной в Java import java.util.ArrayList; import java.util.List; public class EffectiveFinal { public static void main(String[] args) { /* Строка с модификатором 'final', не позволяющим * изменять строку после инициализации */ final String firstName = "Alex"; /* Используем 'final' переменную в интерфейсе Runnable * или в любом анонимном классе */ Thread thread = new Thread(new Runnable() { public void run() { System.out.println("Thread: " + firstName); } }); /*Запускаем поток для отображения значения переменной firstName*/ thread.start(); List listStrings = new ArrayList&lt;&gt;(); listStrings.add("Alex"); listStrings.add("Nick"); /* * lastName - effectively final переменная, инициализированная единожды * и поэтому может быть использована в lambda-выражении * */ String lastName = "Smith"; /* * Если Вы измените значение переменной lastName, то Вы не сможете * использовать данную переменную в lambda-выражении * */ // lastName += ""; listStrings.stream() .forEach(str -&gt; System.out.println("Lambda expression: " + str + " " + lastName)); } } 123456789101112131415161718192021222324252627282930313233343536373839404142 import java.util.ArrayList;import java.util.List; public class EffectiveFinal {    public static void main(String[] args) {       /* Строка с модификатором 'final', не позволяющим         *  изменять строку после инициализации         */        final String firstName = "Alex";         /* Используем...

Пример на с++ произведение положительных чисел

ЗаданиеРеализация на с++Результат работы программыСкачать исходник на с++ Приветствую вас дорогие пользователи. В данный момент на нашем почтовом ящике скопилось огромное количество нерешенных задач. Мы постепенно будем “разгребать” все эти задания и пытаться, как можно скорее решить и опубликовать их. Ну а пока очередная задача, которая была прислана нам недавно: Ввести последовательность чисел, количество которых заранее неизвестно. Признаком окончания ввода последовательности чисел является ввод числа, меньшего суммы предыдущих чисел. Вывести произведение положительных чисел последовательности. Пример: -10, -2, 3, 4, -6 Ответ: 12 PS: напоминаю, что на странице ПНП, с помощью формы обратной связи, вы можете поделится своим решением интересной задачи на с++, либо отправить задание, с которым вы пока не в состоянии справиться. #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; /*Ввести последовательность чисел, количество которых заранее неизвестно. Признаком окончания вода последовательности чисел является ввод числа, меньшего суммы предыдущих чисел. Вывести произведение положительных чисел последовательности. Пример: -10, -2, 3, 4, -6 Ответ: 12*/ inline void inputNumber(int &amp;num){ cout &lt;&lt; "Введите число: "; cin &gt;&gt; num; } int main(){ setlocale(LC_CTYPE,"rus"); int num(0); int sum(0);//сумма чисел int multi(1);//произведение чисел inputNumber(num); while(true){ sum+=num; if(num &gt; 0)multi*=num; inputNumber(num); if(num &lt; sum)break; } if(multi==1) {cout &lt;&lt; endl &lt;&lt; "В последовательности положительных чисел не обнаружено\n";} else {cout &lt;&lt; "Произведение положительных чисел: " &lt;&lt; multi &lt;&lt; endl;} return 0; } 12345678910111213141516171819202122232425262728293031323334353637 #include &lt;iostream&gt;#include &lt;clocale&gt; using namespace std; /*Ввести последовательность чисел, количество которых заранее неизвестно. Признаком окончания вода последовательности чисел является ввод числа, меньшего суммы предыдущих чисел. Вывести произведение положительных чисел последовательности.Пример:-10, -2, 3, 4, -6   Ответ: 12*/ inline void inputNumber(int &amp;num){ cout &lt;&lt; "Введите число: "; cin &gt;&gt; num;} int main(){ setlocale(LC_CTYPE,"rus");  int num(0); int sum(0);//сумма чисел int multi(1);//произведение чисел inputNumber(num);...

Пример на с++: поменять содержимое двух файлов местами

ЗаданиеРеализация на с++Результат работы программыСкачать исходник на с++ Очередное задание решенное по просьбе одного из наших пользователей. Напоминаю Вам, что вы можете прислать нам свои задачи через форму обратной связи(Помогите написать программу) и мы реших их для вас! Дано два файла записей типа: номер прибора, год выпуска, цена. Поменять содержимое этих двух файлов. Дополнительного файла не использовать. Касаемо решения данной задачи. Мною были созданы два файла и в них были занесены некоторые рандомные данные. Затем из каждого файла я считывал строки и записывал в отведенный для этого вектор строк. После этого я удалял все из обоих файлов и записал в них данные хранящиеся в векторах строк. ЗЫ: если кто-то знает более интересное решение данной задачи скидывайте его в комментарии. //ucxodnuku.ru #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;vector&gt; using namespace std; int main() { //вектор строк первого файла vector&lt;string&gt; v1; //вектор строк второго файла vector&lt;string&gt; v2; fstream one, two; one.open("1.txt", fstream::in); two.open("2.txt", fstream::in); string str1; string str2; while(!one.eof() &amp;&amp; !two.eof()) { getline(one,str1); str1+="\n"; getline(two,str2); str2+="\n"; v1.push_back(str1); v2.push_back(str2); } one.close(); two.close(); one.open("1.txt",fstream::out | fstream::trunc); two.open("2.txt",fstream::out | fstream::trunc); for(auto it1=v1.begin(); it1!=v1.end(); it1++) { two&lt;&lt;(*it1); } for(auto it2=v2.begin(); it2!=v2.end(); it2++) { one&lt;&lt;(*it2); } one.close(); two.close(); return 0; } 1234567891011121314151617181920212223242526272829303132333435363738394041424344 //ucxodnuku.ru#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;fstream&gt;#include &lt;vector&gt; using namespace std; int main(){ //вектор строк первого файла vector&lt;string&gt; v1; //вектор строк второго файла vector&lt;string&gt; v2; fstream one, two; one.open("1.txt", fstream::in); two.open("2.txt", fstream::in); string str1; string str2; while(!one.eof() &amp;&amp; !two.eof()) { getline(one,str1); str1+="\n"; getline(two,str2); str2+="\n"; v1.push_back(str1); v2.push_back(str2); } one.close(); two.close(); one.open("1.txt",fstream::out | fstream::trunc); two.open("2.txt",fstream::out | fstream::trunc); for(auto it1=v1.begin(); it1!=v1.end(); it1++) { two&lt;&lt;(*it1); } for(auto it2=v2.begin(); it2!=v2.end(); it2++) { one&lt;&lt;(*it2); } one.close(); two.close(); return 0;} Скачать исходник на...
Страница 1 из 612345...Последняя »