Graph Cpp
Helper Graph class for C++ with CMake support
Loading...
Searching...
No Matches
utils.hpp File Reference
#include <algorithm>
#include <iostream>
#include <numeric>
#include <stdexcept>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <variant>
#include <vector>
Include dependency graph for utils.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

template<typename T >
bool Contains (const std::vector< T > &vec, const T &value)
 Проверяет наличие элемента в векторе.
 
std::string ErasedZerosStr (float number)
 Функция, которая обрезает незнач. нули float при преобр. в строку.
 
template<typename Type1 , typename Type2 >
std::ostream & operator<< (std::ostream &os, const std::pair< Type1, Type2 > &pair)
 Выводит все элементы пары в поток.
 
template<typename... Ts>
std::ostream & operator<< (std::ostream &os, const std::tuple< Ts... > &t)
 Выводит все элементы std::tuple в поток.
 
template<typename K , typename V >
std::ostream & operator<< (std::ostream &os, const std::unordered_map< K, V > &map)
 Выводит все элементы std::unordered_map в выходной поток.
 
template<typename Type >
std::ostream & operator<< (std::ostream &os, const std::vector< Type > &vec)
 Выводит все элементы вектора в поток.
 
template<typename Type >
std::istream & operator>> (std::istream &is, std::vector< Type > &vec)
 Перегрузка, которая вводит все элементы вектора из потока. (работает исключительно с консолью, так как (вывод о текущем состоянии происходит туда)
 
template<std::size_t I = 0, typename... Ts>
static std::ostream & PrintTuple (std::ostream &os, const std::tuple< Ts... > &t)
 Выводит все элементы std::tuple в поток.
 
std::string ReplacedString (std::string origin, const std::string &substring)
 Удаляет подстроку из начала строки, если она там присутствует.
 

Function Documentation

◆ Contains()

template<typename T >
bool Contains ( const std::vector< T > & vec,
const T & value )
inline

Проверяет наличие элемента в векторе.

Template Parameters
Tтип элемента.
Parameters
vecисходный вектор.
valueискомое значение.
Returns
true: элемент найден.
false: элемент не найден.
193 {
194 return std::find(vec.begin(), vec.end(), value) != vec.end();
195}
Here is the caller graph for this function:

◆ ErasedZerosStr()

std::string ErasedZerosStr ( float number)
inline

Функция, которая обрезает незнач. нули float при преобр. в строку.

Parameters
numberчисло типа float.
Returns
std::string: итоговое число, записанное в строку.
125 {
126 std::string origin = std::to_string(number);
127
128 // удаляем незначащие нули
129 origin.erase(origin.find_last_not_of('0') + 1, std::string::npos);
130
131 // если последний символ - десятичная точка, удаляем
132 if (origin.back() == '.') origin.pop_back();
133
134 return origin;
135}

◆ operator<<() [1/4]

template<typename Type1 , typename Type2 >
std::ostream & operator<< ( std::ostream & os,
const std::pair< Type1, Type2 > & pair )
inline

Выводит все элементы пары в поток.

Template Parameters
Type1тип, возможный к выводу в консоль.
Type2тип, возможный к выводу в консоль.
Parameters
osссылка на поток, в который надо вывести (мод.).
pairпара элементов произвольного типа.
Returns
std::ostream: ссылка на поток, в который вывели.
29 {
30 return os << "{" << pair.first << "; " << pair.second << "}";
31}

◆ operator<<() [2/4]

template<typename... Ts>
std::ostream & operator<< ( std::ostream & os,
const std::tuple< Ts... > & t )

Выводит все элементы std::tuple в поток.

Template Parameters
Tsтипы элементов в кортеже.
Parameters
osвыходной поток, в который будет записан кортеж.
tкортеж, который нужно распечатать.
Returns
std::ostream: модифицированный выходной поток.
64 {
65 os << "{";
66 PrintTuple(os, t);
67 return os << "}";
68}
static std::ostream & PrintTuple(std::ostream &os, const std::tuple< Ts... > &t)
Выводит все элементы std::tuple в поток.
Definition utils.hpp:44
Here is the call graph for this function:

◆ operator<<() [3/4]

template<typename K , typename V >
std::ostream & operator<< ( std::ostream & os,
const std::unordered_map< K, V > & map )

Выводит все элементы std::unordered_map в выходной поток.

Template Parameters
Kтип ключей в неупорядоченной карте.
Vтип значений в неупорядоченной карте.
Parameters
osвыходной поток, в который будет записан словарь.
mapсловарь, который нужно распечатать.
Returns
std::ostream: модифицированный выходной поток.
104 {
105 os << "{";
106
107 bool first = true;
108 for (const auto& [key, value] : map) {
109 if (!first) os << "; ";
110
111 os << key << ": " << value;
112 first = false;
113 }
114
115 return os << "}";
116}

◆ operator<<() [4/4]

template<typename Type >
std::ostream & operator<< ( std::ostream & os,
const std::vector< Type > & vec )
inline

Выводит все элементы вектора в поток.

Template Parameters
Typeтип, возможный к выводу в консоль.
Parameters
osссылка на поток, в который надо вывести (мод.).
vecвектор элементов произвольного типа.
Returns
std::ostream: ссылка на поток, в который вывели.
81 {
82 os << "{";
83
84 for (std::size_t i = 0; i < vec.size(); i++) {
85 os << vec[i];
86 if (i != vec.size() - 1) os << "; ";
87 }
88
89 return os << "}";
90}

◆ operator>>()

template<typename Type >
std::istream & operator>> ( std::istream & is,
std::vector< Type > & vec )
inline

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

Template Parameters
Typeтип, возможный к выводу в консоль.
Parameters
isссылка на поток, из которого надо ввести (мод.).
vecвектор элементов типа Type (мод.).
Returns
std::istream: ссылка на поток, из которого ввели.
149 {
150 // @brief Размер вектора
151 long size = 0;
152
153 std::cout << "Enter array size: ";
154 while (size <= 0) {
155 is >> size;
156 if (!is) {
157 std::cerr << "Invalid size input." << std::endl;
158 return is;
159 }
160
161 if (size <= 0) std::cout << "Invalid size input. Try again: ";
162 }
163
164 // @brief Текущий элемент
165 Type curr;
166
167 vec.clear(); // (для перезаписи нужна отчистка)
168 std::cout << "Enter array elements: ";
169 for (std::size_t i = 0; i < std::size_t(size); i++) {
170 is >> curr;
171 if (!is) {
172 std::cerr << "Invalid array input. The entry is incorrect." << std::endl;
173 return is;
174 }
175
176 vec.push_back(curr);
177 }
178
179 return is;
180}

◆ PrintTuple()

template<std::size_t I = 0, typename... Ts>
static std::ostream & PrintTuple ( std::ostream & os,
const std::tuple< Ts... > & t )
static

Выводит все элементы std::tuple в поток.

Template Parameters
Iтекущий индекс, обрабатываемый в кортеже.
Tsтипы элементов в кортеже.
Parameters
osвыходной поток, в который будут записаны элементы кортежа.
tкортеж, который нужно распечатать.
Returns
std::ostream: модифицированный выходной поток.
44 {
45 if constexpr (I < sizeof...(Ts)) {
46 if (I != 0) os << "; ";
47
48 os << std::get<I>(t);
49 return PrintTuple<I + 1, Ts...>(os, t);
50 } else
51 return os;
52}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReplacedString()

std::string ReplacedString ( std::string origin,
const std::string & substring )
inline

Удаляет подстроку из начала строки, если она там присутствует.

Parameters
originисходная строка, из которой нужно удалить подстроку.
substringподстрока, которую нужно удалить из начала строки.
Returns
std::string: строка, в которой подстрока (если она была) удалена из начала.
207 {
208 return origin.rfind(substring, 0) == 0 ? origin.erase(0, substring.length())
209 : origin;
210}