Igor
цсс уже много лет как тьюринг полный ... все в сад ! ;)
Vyacheslav
это классическая ошибка ... изменение массива во время итерирования
Так инсерт же за один раз типа все изменяет При любых других значениях он все правильно делает А при единице копирует предпоследний вместо последнего... Или я чего-то недопонял?
Igor
Но я ведь просто пихаю в начало некую часть из конца и потом обрезаю массив...
когда ты доходишь до позиции с которой начал пихать там уже новые данные
Vyacheslav
когда ты доходишь до позиции с которой начал пихать там уже новые данные
Там нет циклов Там инсерт через рендж итераторов
Иван
Так, ребят, давайте так чтобы я тоже понимал вас
Igor
Там нет циклов Там инсерт через рендж итераторов
ок ... мое дело маленькое я сказал в чем ошибка а верить или нет ваше дело ;) разберитесь как итератор работает ;)
Vyacheslav
ок ... мое дело маленькое я сказал в чем ошибка а верить или нет ваше дело ;) разберитесь как итератор работает ;)
Так я не понимаю почему только с единицей так Берешь любое значение отличное от 1 и все работает....
Mikoratanakaki
Не устаю удивляться продуманности телеграмма, лучший мессенджер эвер
Иван
Так там же всё работает. Стартую в g++ - работает. В clang++ работает. в IDE работает. На литкоде - нет
A.
Sergey
Oleksii
Когда пишешь на C++ добавляешь много библиотек? Просто используйте #include<bits/stdc ++.h>. Это подключение всех библиотек
Jsx707
У вас так потом один лишь Hello world.cpp будет компилироваться вечность
Jsx707
Если вы знаете как работает препроцессор , то вы вероятно понимаете почему это плохое решение, потому что у каждого из хедеров есть свой код , который просто скопируется в ту единицу компиляции , которая компилируется в данный момент и у каждого из этих хедеров не мало строчек кода , особенно директив для условной компиляции и это ооочень долго .... Плюс эти хедеры подключают ещё и другие хедеры
Jsx707
Поэтому подключать нужно , только нужные библиотеки
Oleksii
а, так оно прям все возможные библиотеки подключит или только те, что использу.тся??
Мир
Тут про Джаву спрашивать можно?)
Jsx707
Более того , это плохое решение ещё потому что .... Когда вашу программу будут собирать на других операционных системах , там ещё будут и другие компиляторы и там этих заголовочных файлов может просто не быть , будут ошибки
Jsx707
а, так оно прям все возможные библиотеки подключит или только те, что использу.тся??
Ну , насколько я знаю , этот заголовочный файл просто не может определить какие библиотеки вы подключаете...... Достаточно просто посмотреть исходный код , там будет очень много #include'ов и вы просто посмотрите , какие же библиотеки он подключает
Jsx707
Скорее всего стандартный набор
Jsx707
обернуть в try ?
try? Это по-моему вообще из Python
Jsx707
Хотя можно сделать аналог
Jsx707
#if #include <conio.h> #else std :: cout<<"You haven't required header ! Please, install all requirements!"<<std :: endl;
Jsx707
Типа того , хотя вполне возможно , что я что-то спутал
Jsx707
Ибо я не кодил уже месяц-два)
Jsx707
Но по-моему как-то так , ибо это условная компиляция , если не подключается этот заголовочный файл ,выводится соответствующее сообщение
Jsx707
Хотя здесь она используется не совсем правильно
Igor
Так я не понимаю почему только с единицей так Берешь любое значение отличное от 1 и все работает....
вы хотите сделать вот такое void rotate(vector<int>& nums, int k) { if(k == 0) return; k %= nums.size(); int size = nums.size(); auto nums_copy = nums; auto it = nums_copy.end() -= k; nums.insert(nums.begin(), it, nums_copy.end()); nums.resize(size); } то что написанно у вас работает по недоразумению. по стандарту все итераторы после места вставки являются не валидными ... ваши итераторы все после вставки находятся
Igor
https://cplusplus.com/reference/vector/vector/insert/ Because vectors use an array as their underlying storage, inserting elements in positions other than the vector end causes the container to relocate all the elements that were after position to their new positions.
Igor
и дальше Iterator validity If a reallocation happens, all iterators, pointers and references related to the container are invalidated. Otherwise, only those pointing to position and beyond are invalidated, with all iterators, pointers and references to elements before position guaranteed to keep referring to the same elements they were referring to before the call.
Иван
Уже куча всего в голове. Сохраню, а завтра уже разберусь. Спасибо
Igor
Уже куча всего в голове. Сохраню, а завтра уже разберусь. Спасибо
просто запомни итерировать и менять один и тот же вектор "плохо!" ...
Igor
темболее если ты меняешь его размер ты ничего не теряешь просто сделав копию.
Иван
Не хотелось делать различные копии
Igor
Не хотелось делать различные копии
ты всеравно почти всегда перевыделяешь память когда меняешь размер вектора. задание было про инплейс изменения на сколько я понял и то что ты изобразил это "не совсем то что от тебя требовалось"
Oleksii
try? Это по-моему вообще из Python
Обработчик исключений
Jsx707
Обработчик исключений
В C++ его нету, там есть switch - case разве что , но в случае с подключением библиотек он не подойдёт
Igor
Не хотелось делать различные копии
если тебе интересно я могу объяснить почему у тебя локально работает
Igor
и покажу как сломать локально
Jsx707
https://highload.today/throw-try-i-catch-v-c/
Кстати , реально , я совсем забыл про них ..... Прошу прощения , реально забыл 😂. Попробуй , но не знаю , надо ли оно , скорее всего тот хедер , который ты хотела использовать , подключает самые базовые библиотеки
Jsx707
Которые есть везде , но лучше перестраховаться
Jsx707
И не использовать его
Oleksii
вот например в шарпе, но новым стандартам, создается файл со всеми импортами и уже из него идут все импорты во все файлы. фича спорная по производтельности
Igor
Да, было бы отлично
смотри ты локально создаешь вектор как нибудь так vector<int> a = {1,2,3}; и у него cout<<a.capacity(); объем выделенный равен ровно 3 они же делают что то типа vector<int> a; a.push_back(1); a.push_back(2); a.push_back(3); когда читают данные из файла. и у них капасити не равен 3. поэтому когда ты первый раз делаешь инсерт ты создаешь копию ... и работаешь с ней ... а итератор it бегает по старому массиву у них же копия не создается и индексы "плывут"
Jsx707
вот например в шарпе, но новым стандартам, создается файл со всеми импортами и уже из него идут все импорты во все файлы. фича спорная по производтельности
Так можно и в C++ делать , вполне себе можно , но только это и вправду спорно ибо могут быть проблемы на этапе линковки , осторожнее нужно быть с этим Ибо во время компиляции , вернее уже линковки все файлы программы объединяются в один
Igor
Да, было бы отлично
чтобы сломать локальный код просто сделай что то типа vector<int> a = {1,2,3}; a.reserve(10);
Jsx707
И там будут уже проблемы ибо будет очень много функций с одинаковым именем и ТД и будут ошибки
Jsx707
Можно обойти используя что-то типа #pragma once
Jsx707
Но это .... Конечно это спорно
Igor
Аааааа, я понял, спасибо,но всë равно очень трудно. Завтра ещë покликаю всë возможное и закреплю так сказать
Просто у методов в документации нужно смотреть инвалидацию указателей если указатели инвалидируются значит могут быть подобные проблемы. Могут быть и гораздо неприятней.
Igor
Ыыы пришла жена дала по шапке ;) пришлось делать тентакли для девочек ;)
Bogdan
правда глобальные импорты это так себе идея:D
Igor
не получается сделать норм пульсацию ;(
Oleksii
так ?
а через что делали?
Igor
куча вложенных дивов и цсс
Oleksii
аааа
Вячеслав
Господа, как правильно указать тайпхин в классметоде, указывающий на то, что из этого метода возвращается лист инстанций класса?
Вячеслав
Или это что-то бесполезное?
Вячеслав
class Station: def __init__(self, location: Dict[str, str], area_phone_numbers: Tuple[tuple], ip_address: str): self.location = location self.area_phone_numbers = area_phone_numbers self.ip_address = ip_address @classmethod def inst_station(cls): with open('area_phone_numbers.csv', mode='r') as phones: reader = csv.reader(phones, delimiter=';') station_list = [] for num_line, line in enumerate(reader): if num_line != 0: station_list.append(cls(*line)) return station_list
Вячеслав
Если ставлю у этого метода -> List[Station] он ругается
Ron
Если ставлю у этого метода -> List[Station] он ругается
а как кстати это называется, когда можно показать какой тип данных ожидается?
Ron
енто, сорри, не увидел, что ты уже написал сверху, спасибо ^^
Vyacheslav
просто запомни итерировать и менять один и тот же вектор "плохо!" ...
Это понятно Непонятно почему работает сдвиг больше чем на 1 и не работает с 1 ))) Почему не все не работает, или не через раз? Хотя наверное для этого нужно в реализацию вектора смотреть...
Igor
от капасити зависит