В этом посте расскажу про std::sample() и как правильно её использовать.
Обычно эту функцию используют для:
✓ Случайной выборки✓ Подготовки тестов✓ Быстрых подсказокPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
🔥5
Покажу простой способ прочитать .ini с ключами вида section.key=value и собрать результат в удобную структуру.
Сначала подготовим типы данных и функцию разбиения строки по символу равно.
#include <string>
#include <unordered_map>
#include <fstream>
#include <sstream>
using Cfg = std::unordered_map<std::string, std::string>;
std::pair<std::string, std::string> splitEq(const std::string& s) {
auto p = s.find('=');
if (p == std::string::npos) return {s, ""};
return {s.substr(0, p), s.substr(p + 1)};
}
Теперь читаем файл построчно пропускаем пустые и комментарии и собираем ключи section.key.
Cfg loadIni(const std::string& path) {
Cfg cfg;
std::ifstream in(path);
std::string line, section;
while (std::getline(in, line)) {
if (line.empty()) continue;
if (line[0] == '#' || line[0] == ';') continue;
if (line.front() == '[' && line.back() == ']') {
section = line.substr(1, line.size() - 2);
} else {
auto kv = splitEq(line);
std::string key = section.empty() ? kv.first : section + "." + kv.first;
cfg[key] = kv.second;
}
}
return cfg;
}Финальный шаг получаем значение по ключу и используем дефолт если его нет.
std::string getOr(const Cfg& c, const std::string& k, const std::string& d) {
auto it = c.find(k);
if (it == c.end()) return d;
return it->second;
}
int main() {
auto cfg = loadIni("app.ini");
std::string host = getOr(cfg, "server.host", "127.0.0.1");
std::string port = getOr(cfg, "server.port", "8080");
std::cout << host << " " << port << "\n";
}🧩 Такой формат читабелен и прост в поддержке. Если нужно больше контроля добавь трим пробелов и валидацию типов на этапе чтения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Проверка скобок нужна, чтобы не кормить парсер битой строкой и рано отбрасывать ошибки. В уроке собран минимальный код, который легко вставить в валидацию перед разбором выражения.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Полезно для:
✓ Временных файлов✓ Запуска подпроцессов✓ Тестовой изоляцииСмена рабочей директории упрощает доступ к нужным ресурсам без длинных путей. Держите в голове что операция влияет на весь процесс и все потоки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Пул снижает давление на аллокатор и ускоряет горячие пути, где создаются однотипные объекты. В карточках разобран минимальный шаблон выдачи по индексу и ручной буфер с выравниванием для случаев, когда нужен полный контроль.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2