История изменений
Исправление soomrack, (текущая версия) :
Потому что ты удалил элемент, который у тебя в итераторе, нужно вначале увеличить итератор, а потом резать голову:
for(auto k = count.begin(); k != count.end();) {
std::cout << *k << std::endl;
k++;
count.pop_front();
}
}
И как называется структура данных, под которую выделена память?
Никак. Зависит от того, как ты ее организуешь, какие будут базовые операции, как она будет хранить данные.
То есть, если базовые операции запрещены, то это хороший список, а если медленные, то плохой? Можешь не пользоваться в питоне операциями изменения списка и тогда список будет хорошим.
Если структуру данных называют списком, то в ней должны быть базовые операции списка. Если базовые операции модификации списка запрещены, то структура данных по-прежнему является списком, потому что она образована из списка путем запрета части операций.
И да, если базовые операции медленные, то это плохая реализация структуры.
std::vector::insert, std::vector::erase.
Это расширение функциональности для структуры «динамический массив», формально они используют только базовые операции динамического массива, т.е. не создают новых сущностей; эти операции довольно медленны, их сложность O(n), в то время как для списка они O(1).
Исправление soomrack, :
Потому что ты удалил элемент, который у тебя в итераторе, нужно вначале увеличить итератор, а потом резать голову:
for(auto k = count.begin(); k != count.end();) {
std::cout << *k << std::endl;
k++;
count.pop_front();
}
}
И как называется структура данных, под которую выделена память?
Никак. Зависит от того, как ты ее организуешь, какие будут базовые операции, как она будет хранить данные.
То есть, если базовые операции запрещены, то это хороший список, а если медленные, то плохой? Можешь не пользоваться в питоне операциями изменения списка и тогда список будет хорошим.
Если структуру данных называют списком, то в ней должны быть базовые операции списка. Если базовые операции модификации списка запрещены, то структура данных по-прежнему является списком, потому что она образована из списка путем запрета части операций.
И да, если базовые операции медленные, то это плохая реализация структуры.
std::vector::insert, std::vector::erase.
Это расширение функциональности для структуры «динамический массив», эти операции довольно медленны, их сложность O(n), в то время как для списка они O(1).
Исправление soomrack, :
Потому что ты удалил элемент, который у тебя в итераторе, нужно вначале увеличить итератор, а потом резать голову:
for(auto k = count.begin(); k != count.end();) {
std::cout << *k << std::endl;
k++;
count.pop_front();
}
}
И как называется структура данных, под которую выделена память?
Никак. Зависит от того, как ты ее организуешь, какие будут базовые операции, как она будет хранить данные.
То есть, если базовые операции запрещены, то это хороший список, а если медленные, то плохой? Можешь не пользоваться в питоне операциями изменения списка и тогда список будет хорошим.
Если структуру данных называют списком, то в ней должны быть базовые операции списка. Если базовые операции модификации списка запрещены, то структура данных по-прежнему является списком, потому что она образована из списка путем запрета части операций.
И да, если базовые операции медленные, то это плохая реализация структуры.
std::vector::insert, std::vector::erase.
Это расширенние функциональности для структуры «динамический массив», эти операции довольно медленны, их сложность O(n), в то время как для списка они O(1).
Исходная версия soomrack, :
Потому что ты удалил элемент, который у тебя в итераторе, нужно вначале увеличить итератор, а потом резать голову:
for(auto k = count.begin(); k != count.end();) {
std::cout << *k << std::endl;
k++;
count.pop_front();
}
}
И как называется структура данных, под которую выделена память?
Никак. Зависит от того, как ты ее организуешь, какие будут базовые операции, как она будет хранить данные.
То есть, если базовые операции запрещены, то это хороший список, а если медленные, то плохой? Можешь не пользоваться в питоне операциями изменения списка и тогда список будет хорошим.
Если структуру данных называют списком, то в ней должны быть базовые операции списка. Если базовые операции модификации списка запрещены, то структура данных по-прежнему является списком, потому что она образована из списка путем запрета части операций.
std::vector::insert, std::vector::erase.
Это расширенние функциональности для структуры «динамический массив», эти операции довольно медленны, их сложность O(n), в то время как для списка они O(1).