Skip to content

Instantly share code, notes, and snippets.

#include <iostream>
template <typename Function>
inline void VRep(size_t n, Function f) {
for (size_t i(0); i < n; ++i)
f();
}
class {
private:
@kvk1920
kvk1920 / task1(v1).cpp
Created March 26, 2018 19:12
Ломанный англо-саксонский + работает без дебаг-вывода в 1.5 раз дольше стандартного аллокатора. Ну и ещё могу сказать точно: аллокаторы копируются, в них можно хранить инфу. А ещё практика показала, что в качестве WORD лучше всего брать int или long.
#include <memory>
#include <iostream>
#include <fstream>
#include <list>
/*
* If function isn't safe, its name looks like a "__FunctionName"
*/
namespace VDebugTools {
#include <iterator>
namespace Hard1 {
/**
* template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
* typename _Pointer = _Tp*, typename _Reference = _Tp&>
* Это шаблон std::iterator.
* Т.к. insert-итераторы не указывают на объект какого-то типа, то _Tp следует сделать
* void.
template <typename Iterator, typename IteratorType>
struct __advance {
static Iterator f(Iterator it, int n) {
while (n > 0) { ++it; --n; }
while (n < 0) { --it; ++n; }
return it;
}
};
template <typename Iterator>
template <typename Iterator, typename IteratorType>
struct __distance {
static typename std::iterator_traits<Iterator>::difference_type
f(Iterator l, Iterator r) {
typename std::iterator_traits<Iterator>::difference_type result(0);
while (l != r) {
++l;
++result;
}
return result;
/*
В плюсах есть правило: в одно время не могут быть необработанны два исключения.
Тут будет происходить примерно следующее:
Деструтор class B будет кидать исключение.
В классе А будет поле В.
Функция f() создаст объект А и бросит исключение.
Исключение приведёт к вызову деструктора А, тот в свою очередь вызовет ~B(), а тот бросит ещё одно исключение.
И получим 2 необработанных исключениея одновременно, что приведёт к ваврийному завершению программы.
*/
//
// Created by kvk1920 on 21.07.18.
//
/**
*Слотов пока нет, но будут.
*/
#ifndef MYSTL_SIGSLOTS_H
#define MYSTL_SIGSLOTS_H
#include <iostream>
#include "sigslots.h"
using namespace std;
template <bool First = true, typename T, typename ...Args>
void Log(const T& t, const Args& ...args) {
cerr << t << ' ';
if constexpr (sizeof...(args))
Log<false>(args...);
template <typename T, size_t D = 1, bool Owner = true>
class TMatrix
{
public:
TMatrix(std::vector<size_t> n_)
: n(std::move(n_))
{
static_assert(Owner);
assert(n.size() == D - 1);
  1. First of all you need either Clang64 or MinGW64 MSYS2 environment
  2. You will probably need to install llvm and cmake: pacman -S install llvm cmake
  3. c3c: https://github.com/kvk1920/c3c
git clone https://github.com/kvk1920/c3c c3c_win_test
cd c3c_win_test
git checkout windows_compatibility
mkdir cmake-build
cd cmake-build
cmake .. -G "MinGW Makefiles"