Обновить
-14
AxisPod@AxisPod

Пользователь

2
Подписчики
Отправить сообщение
Ну не знаю, часто бывает, что использование вектора для частых добавлений это просто ошибка проектирования, мне приходилось работать со списками данных с 2 и более миллионами записей, использовал list, проблем не обнаруживал вообще. Нормально и добавлял и бегал и получал доступ к нужным элементам, делал частичный индекс и многое другое и прожил без vector.

Если бы вы сначала описали, зачем вам понадобился именно vector. Было бы интереснее, да и может быть предложили бы другой вариант. А стандартный контейнер я переписывал только 1 раз, мне нужна была репликация данных на диск при изменении.
Ну хэши будут во время компиляции в одном случае, если этого захочет оптимизатор, а если не захочет, будет run-time код. Для того, чтобы был 100% compile-time нужно избавится от всех методов. А в вашем случае, если получится run-time, то будет совсем жуткое кол-во кода.
Простите, а где здесь compile-time? Я так понимаю compilte-time тут будет только если этого захочет оптимизатор, а иначе будет run-time? Или я ошибаюсь?
На худой конец можно было хотябы избавится от run-time, а синтаксис оставить подобным, что-то типа.

Что-то типа для одного байта, расширять можно до бесконечности

#include <iostream>

// Основной тип для вычисления, здесь пробегаем рекурсивно число.
template<
int c01 = -1, int c02 = -1, int c03 = -1, int c04 = -1,
int c05 = -1, int c06 = -1, int c07 = -1, int c08 = -1
>
struct bin_to_dec
{
enum {value = bin_to_dec<-1, c01, c02, c03, c04, c05, c06, c07>::value << 1 | c08};
};

// Тип для ротации вправо, в случае, если указаны не все биты.
template<
int c01, int c02, int c03, int c04, int c05, int c06, int c07
>
struct bin_to_dec<c01, c02, c03, c04, c05, c06, c07, -1>
{
enum {value = bin_to_dec<-1, c01, c02, c03, c04, c05, c06, c07>::value};
};

// тип для завершения вычислений, для завершения рекурсии первого типа
template<>
struct bin_to_dec<-1, -1, -1, -1, -1, -1, -1, -1>
{
enum {value = 0};
};

int main(int argc, char *argv[])
{
std::cout << bin_to_dec<1,0,1>::value << std::endl;
std::cout << bin_to_dec<0,1,1,0,0,1,0,1>::value << std::endl;
return 0;
}

В результате мы получили compile-time, нужно только подумать.
Ну здесь требуется понимание работы шаблонов, а это думаю не сложно, простейший рекурсивный шаблон. Если же пользоваться шаблонами и не знать как они работают, это не есть хорошо. Да и существуют комментарии, к хитрому коду пишу всегда, если наоборот не требуется запутать.
Ну да, минус только в разрядах, но для большинства задач хватает небольшого кол-ва, можно использовать 64 битный тип, будет побольше разрядов. Но в данном примере полный compile-time, а для run-time можно просто строку использовать.
нет, ведущие нолики не указывать и будет работать. Или делить на 8 и писать всегда ведущий 0.
нет, ведущие нолики не указывать и будет работать.
Блин, вырезались знаки больше-меньше, код

template<int N>
struct binary
{
static const int value = (N % 10) + 2 * binary<N / 10>::value;
};

template<>
struct binary<0>
{
static const int value = 0;
};

использовать
binary<11101111>::value
hash_text очень странный, какой в нем смысл? Если функция runtime. Почему нельзя было использовать тернарный оператор и enum или static const unsigned int переменную, например как сделано в code_text для count. Тогда будет compile-time. А для двоичных чисел просто изврат какой-то. Вот реальный рабочий пример, без извратов и с минимумом кода.

template
struct binary
{
static const int value = (N % 10) + 2 * binary< N / 10 >::value;
};

template
struct binary
{
static const int value = 0;
};

использование

binary::value;

и в результате полнейший compile-time.

На будущее я бы посоветовал покопать в сторону мета-программирования на сях.
Почитать
Джеф Элджер C++ for Real Programmers (есть на русском)
Андреq Александреску Modern C++ Design (есть на русском)
David Abrahams and Aleksey Gurtovoy, C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (на русском не видел).
А уже затем заниматься ненормальным программированием.
Согласен, скорее узким местом станет неправильный выбор контейнера.
хм 12 гигов и 32битная система?
Совсем неочевидно, можно сказать одно с уверенностью, это 3 фарианта: -1, 0, +1.

1. Линия разреза прошла через 2 соседник вершины (угла) — получаем на 1 угол меньше
2. Линия разреза прошла через 1 соседнюю вершину и 1 соседнюю сторону — получаем идентичное кол-во углов
3. Линия разреза прошла через 2 соседних стороны — получаем на 1 угол больше
Хм, что курил автор перед тем как придумывать задачи? оО
Сказано 2 3х значных числа :)
По 4й даже и этого сказать нельзя, а может тут некий аналог римской записи, только от положение результат не меняется, порядок можно менять и тогда 2й вариант равны, или же направление чтения справа налево и в 3м круглешочек с точкой внутри является нулем. Тут вообще ничего нельзя сказать и никак не сравнить, не зная закона.
4я задачка ваще какая то жесть. А вот если в самом первом примере первый знак является знаком минус. Или запись в этих числах с конца или запись по правилам римских чисел, как там сравнивать.

А вот по 5й я все же придерживаюсь мнения автора статьи, там написано «прибавила», а не «дописала».

Вообще страшно становится после того, как видишь школьные учебники, такого все больше и больше, я так понимаю это все переводы и переводы довольно фиговенькие. Особенно вспоминается задачка:
У стола отрезали угол, сколько углов стало у стола, из учебника первого класса.
template<int n>
struct Fractal
{
    enum{Value=n * Fractal<n-1>::Value}
};

template<>
struct Fractal
{
    enum{Value=1}
};

Fractal<5>::Value;

А так некий С++'шник.
Ну это слегка другое семейство фракталов и считаются иначе, это все же семейство Жюлиа и Мандельброта. Если в афинном множестве просчитывается координата точки, то в семействе Жюлиа просчитывается скорость улетания точки в бесконечность. Соотвественно афинные множества выглядят как хитрые фигуры и с резкими переходами, то семейство Жюлиа довольно плавные.

Есть еще стохастические фракталы, они очень хорошо подходят для генерации различных несемитричных фигур.
Что-то похожее на афинные множества. Такие вот фракталчики существуют построенные примерно по таким законам.

Информация

В рейтинге
Не участвует
Откуда
Челябинск, Челябинская обл., Россия
Дата рождения
Зарегистрирован
Активность