Re[6]: Оцените решение задачи
От: Evgeny.Panasyuk Россия  
Дата: 16.10.14 19:07
Оценка:
Здравствуйте, Erop, Вы писали:

PM>>А учитывая, что в стандартной библиотеке для индексов и количества элементов в контейнере используется беззнаковый size_t

E>Разве это гарантируется?

У аллокаторов ::size_type — это беззнаковое целое.
У std::allocator, который является аллокатором по-умолчанию для контейнеров, size_type это size_t, но контейнеры не обязаны его использовать как свой size_type.
У контейнеров size_type — это implementation-defined беззнаковое целое.
Отредактировано 16.10.2014 19:07 Evgeny.Panasyuk . Предыдущая версия .
Re[9]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:10
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Что конкретно "ужасного" там?


http://rsdn.ru/forum/cpp/2072440.flat
Автор: gid_vvp
Дата: 23.08.06

http://rsdn.ru/forum/cpp/2073293.flat
Автор: Mazay
Дата: 23.08.06

http://rsdn.ru/forum/cpp/2074310.flat
Автор: asdfghjkl
Дата: 24.08.06

и т. д...

Кое-что, правда, подправили, несколько ракообразно, но хоть как-то.
Но даже вот прикручивать к массиву аллокатор вроде CAutoBuffer
Автор: Erop
Дата: 27.02.07
'а, и то так и не разрешили...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:13
Оценка: +1
Здравствуйте, Sni4ok, Вы писали:

S>ну и в целом всё убого- скорость O(N^2) вместо напрашивающихся O(n * log(n))


Вроде бы O(N) оба раза, если N -- cуммарная длина списков, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[15]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:15
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>3. Какая альтернатива-то?


Ну линк, например...

Вообще речь идёт об альтернативе чему? Главная проблема STL в том, что это библиотека не понятно для чего...
Но правда, лучше в отдельную тему завести или занекропостить, если есть что новое сказать
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:17
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Линейный обход связного списка в общем случае на порядок(и) дороже чем соответствующий обход вектора. Если в задаче не указанно что нужен именно связный список, то по-умолчанию нужно брать vector.


Одно из уродств STL в том, что в ней по умолчанию лучше брать list...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Оцените решение задачи
От: smeeld  
Дата: 16.10.14 19:18
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Беззнаковые надо использовать там где нет и не может быть отрицательных индексов и смешений-перемешений.

AWW>И это очень важно, и к этому следует привыкать и стремится.
AWW>То есть знаковые только там где арифметика, и отрицательный офсет НУЖЕН. Везде где индексы только "size_t".

От этого сообщения исходит опыт разгребания непонятных крешей и странных поведений.
Не сразу втыришь, что индекс прохода по массиву на int, и, по стечению
некоторых обстоятельств, уходит в отрицательные значения.
Re[10]: Оцените решение задачи
От: Evgeny.Panasyuk Россия  
Дата: 16.10.14 19:23
Оценка: :)
Здравствуйте, Erop, Вы писали:

EP>>Что конкретно "ужасного" там?

E>http://rsdn.ru/forum/cpp/2072440.flat
Автор: gid_vvp
Дата: 23.08.06


45 страниц могу же сорваться и ответить там на что-нибудь

E>http://rsdn.ru/forum/cpp/2073293.flat
Автор: Mazay
Дата: 23.08.06


Потоки ввода-вывода это не STL.

E>http://rsdn.ru/forum/cpp/2074310.flat
Автор: asdfghjkl
Дата: 24.08.06


std::string это не STL.

E>и т. д...


Не холивара ради — приведи пару пунктов от себя.

E>Но даже вот прикручивать к массиву аллокатор вроде CAutoBuffer
Автор: Erop
Дата: 27.02.07
'а, и то так и не разрешили...


Вроде же добавили поддержку stateful allocators в C++11
Re[7]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:31
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>У контейнеров size_type — это implementation-defined беззнаковое целое.

А есть гарантия, что беззнаковое?
Тоесть, если я хочу свой конетейнер сделать для стандартных алгоритмов, то я тоже обязан беззнаковое использовать для инндекса, например?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:35
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>45 страниц

Это его ещё попилили на части, так там боьше было

EP>могу же сорваться и ответить там на что-нибудь

Оно вроде бы заперто, сначала надо наголосовать на отпирание.
Но можно просто новый топик созжать со ссылками и цитатами из того флейма и понесётся

но лучше не тут по-любому и сначала глянуть небыло ли это уже обсуждено

E>>http://rsdn.ru/forum/cpp/2073293.flat
Автор: Mazay
Дата: 23.08.06

EP>Потоки ввода-вывода это не STL.
Ну фиг его знает. Станадартная библа шаблонов же?

E>>http://rsdn.ru/forum/cpp/2074310.flat
Автор: asdfghjkl
Дата: 24.08.06

EP>std::string это не STL.
Это уже терминологический спор, IMHO.


E>>Но даже вот прикручивать к массиву аллокатор вроде CAutoBuffer
Автор: Erop
Дата: 27.02.07
'а, и то так и не разрешили...


EP>Вроде же добавили поддержку stateful allocators в C++11


Ну прикрути неракообразно...

Кстати, ещё чего вектору не хватает, так это то, что он не может спросить у аллокатора, скока тому удобно памяти дать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 19:38
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Не холивара ради — приведи пару пунктов от себя.

Заведи топик, где это не офтопик -- приведу
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Оцените решение задачи
От: Evgeny.Panasyuk Россия  
Дата: 16.10.14 19:38
Оценка: 10 (1)
Здравствуйте, Erop, Вы писали:

EP>>У контейнеров size_type — это implementation-defined беззнаковое целое.

E>А есть гарантия, что беззнаковое?

Да: "Table 96 — Container requirements ... X::size_type unsigned integer type"

E>Тоесть, если я хочу свой конетейнер сделать для стандартных алгоритмов, то я тоже обязан беззнаковое использовать для инндекса, например?


Не помню есть ли алгоритмы STL принимающие контейнер, а не итераторы. Вспоминается только boost'вский remove_erase и подобные.
А так да, если бы были — то да, формально должно быть беззнаковое.
Re[16]: Оцените решение задачи
От: Evgeny.Panasyuk Россия  
Дата: 16.10.14 19:40
Оценка:
Здравствуйте, Erop, Вы писали:

EP>>3. Какая альтернатива-то? Естественно без потери мощности в общем случае

E>Ну линк, например...

Так там же мощность теряется. Практически после любой операции — получаем single pass, и излишнее копирование как следствие.
Это конечно не всегда является проблемой, но мы же обсуждаем часть стандартной библиотеки C++, а не Python'а там или C#'а.

E>Вообще речь идёт об альтернативе чему?


алгоритмы + контейнеры
Re[8]: Оцените решение задачи
От: smeeld  
Дата: 16.10.14 19:41
Оценка:
Здравствуйте, Erop, Вы писали:

E>А есть гарантия, что беззнаковое?


template<>
  class allocator<void>
  {
  public:
  typedef size_t size_type;

size_t стандартом С++ ABI x86 и sparc определены как беззнаковое.
Re[6]: Оцените решение задачи
От: Evgeny.Panasyuk Россия  
Дата: 16.10.14 19:43
Оценка:
Здравствуйте, Erop, Вы писали:

EP>>Линейный обход связного списка в общем случае на порядок(и) дороже чем соответствующий обход вектора. Если в задаче не указанно что нужен именно связный список, то по-умолчанию нужно брать vector.

E>Одно из уродств STL в том, что в ней по умолчанию лучше брать list...

Почему? В стандарте даже явно сказано обратное:

23.2.3 Sequence containers
The sequence containers offer the programmer different complexity trade-offs and should be used accordingly. vector or array is the type of sequence container that should be used by default. list or forward_list should be used when there are frequent insertions and deletions from the middle of the sequence. deque is the data structure of choice when most insertions and deletions take place at the beginning or at the end of
the sequence.

Re[12]: Оцените решение задачи
От: Evgeny.Panasyuk Россия  
Дата: 16.10.14 19:56
Оценка:
Здравствуйте, Erop, Вы писали:

EP>>могу же сорваться и ответить там на что-нибудь

E>Оно вроде бы заперто, сначала надо наголосовать на отпирание.

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

E>>>http://rsdn.ru/forum/cpp/2073293.flat
Автор: Mazay
Дата: 23.08.06

EP>>Потоки ввода-вывода это не STL.
E>Ну фиг его знает. Станадартная библа шаблонов же?

Не, то просто standard library, даже несмотря на то что там тоже есть шаблоны.

E>>>http://rsdn.ru/forum/cpp/2074310.flat
Автор: asdfghjkl
Дата: 24.08.06

EP>>std::string это не STL.
E>Это уже терминологический спор, IMHO.

Да это не спор. Это просто другая тема.
Я обсуждаю STL, а конкретно библиотеку Степанова и её производные, а не стандартную библиотеку C++ целиком. Ни потоки ввода-вывода, ни строки в STL не входят.

E>Кстати, ещё чего вектору не хватает, так это то, что он не может спросить у аллокатора, скока тому удобно памяти дать...


Да, не хватает. А ещё нехватает возможности расширения in-place, а-ля realloc. Кстати, у Александреску, есть выступление, где он рассказывает про их вектор способный тесно взаимодействовать с аллокатором.
Re[3]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 20:16
Оценка:
Здравствуйте, sokel, Вы писали:

S>ага, как то так наверное:

S>
S>int main(int argc, char* argv[])
S>{
S>    vector<list_type> lists = {
S>            { 1, 5, 12, 28, 31 },
S>            { 6, 9, 13 },
S>            { 3, 7, 10, 15 }
S>    };
S>    print(lists);
S>    return 0;
S>}
S>


C++ таки? Логичнее же у какого-то объекта GetNext звать?

Для трёх кучу делать странно, IMHO и min_elenemt'а за глаза:
template<typename TIter, typename TElem = typename TIter::value_type>
class CSeqMerger {
public:
    template<typename TCont>
    CSeqMerger& operator << ( TCont& c ) 
    {
        add( c.begin(), c.end() );
        return *this;        
    } 

    bool IsEmpty() const
         { return data.empty(); }
    TElem GetNext() 
    {
        assert( !IsEmpty() );
        std::vector<rahge_t>::iterator m = min_element( data.begin(), data.end(), predicate );
        TElem res = *m->first++;
        if( m->first == m->second ) {
            data.erase( m );
        }
        return res;
    }
private:
    typedef std::pair<TIter, TIter> range_t;
    std::vector<range_t> data;
    static bool predicate( const range_t& a1, const range_t& a2 ) 
        { return *a1->first < *a2->first; }
    add( TIter beg, TIter end ) 
        { data.push_back( range_t( beg, end ) ); }
};

template<typename TCont> CSeqMerger<TCont::const_iterator> GetSeqMerger( const TCont c )
{
    CSeqMerger<TCont::const_iterator> res;
    res << c;
    return res;
}

template<typename TOut, typename TSeq> void print( TOut& o, TSeq seq )
{
    while( !seq.IsEmpty() )
        o << seq.GetNext() << " ";
}

int main(int argc, char* argv[])
{
    vector<int> 
        a = { 1, 5, 12, 28, 31 },
        b = { 6, 9, 13 },
        c = { 3, 7, 10, 15 }
    ;
    
    print( std::cout, GetSeqMerger( a ) << b << c );
    return 0;
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[17]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 20:17
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


E>>Вообще речь идёт об альтернативе чему?

EP>алгоритмы + контейнеры

Это вообще не является задачей или группой задач.
Правда нужна другая тема.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 20:18
Оценка:
Здравствуйте, smeeld, Вы писали:

S>size_t стандартом С++ ABI x86 и sparc определены как беззнаковое.


Так не интересно.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 20:19
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Почему?

По разным замерам, насколько я помню...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[13]: Оцените решение задачи
От: Erop Россия  
Дата: 16.10.14 20:21
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Я обсуждаю STL, а конкретно библиотеку Степанова и её производные, а не стандартную библиотеку C++ целиком. Ни потоки ввода-вывода, ни строки в STL не входят.

Библиотека Степанова довольно сильно отличается от того даже, что в С++03 было, и уж поадвно от ныненшних красот. Вообще у Степанова был, в лучшем случае концепт некий.

но лучше отдельную тему.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.