Тема: Що краще std::copy чи звичайний цикл?
Скажімо, я використав set, щоб прибрати всі копії, а потім мені треба перенести все до vector.
Що краще використати для цього std::copy чи звичайний цикл?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Що краще std::copy чи звичайний цикл?
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Скажімо, я використав set, щоб прибрати всі копії, а потім мені треба перенести все до vector.
Що краще використати для цього std::copy чи звичайний цикл?
Teg Miles, звернiть увагу на конструктор 5 https://en.cppreference.com/w/cpp/conta … tor/vector
Але якщо у векторi зарезервувати пам'ять заздалегiдь, а потiм скопiювати то може бути краще.
Teg Miles, звернiть увагу на конструктор 5 https://en.cppreference.com/w/cpp/conta … tor/vector
Тобто std::copy просто переносить вказівники на ітератори з одного контейнера в інший?
steamwater написав:Teg Miles, звернiть увагу на конструктор 5 https://en.cppreference.com/w/cpp/conta … tor/vector
Тобто std::copy просто переносить вказівники на ітератори з одного контейнера в інший?
Нi. У нього є рiзнi спецiалiзацiї. Щодо iтераторiв - вiн копує з iтератора до iтератора, чи навiть переносить (див.https://en.cppreference.com/w/cpp/itera … e_iterator). Останнє, власне є теж копiюванням, але конструктором пересування. Така поведiнка не є властивiвiстью, саме std::copy. Так працюють i iншi алгоритми std/stl. Це властивiсть саме iтераторiв як таких. Серед них є багато типiв, але для початку, дивiться на них як на свого роду вказiвники. Тобто по них можна читати, писати (не по всiх видах, але поки це не вожливо).
Тобто, std::copy разiменовує кожен iтератор контейнера-джерела i копує значення цiльового об'єкту до разiменованого iтератора контейнера-цiлi. Попарно. Потiм iнкрементує обох.
Краще за яким саме критерієм?
Ну і так, є конструктор.
Краще за яким саме критерієм?
Ну і так, є конструктор.
Краще щодо швидкості й обсягу пам'яті, що використовується при цьому.
koala написав:Краще за яким саме критерієм?
Ну і так, є конструктор.Краще щодо швидкості й обсягу пам'яті, що використовується при цьому.
Ви маєте std::set. Тобто його розмiр ви знаєте, тож зарезервуйте у векторi мiсце, та скопуйте той сет з початку до кiнця у початок вектора.
Хочу ще звернути увагу на те, що алгоритми не мають посилання на контейнери, а працюють саме з їх iтераторам. Тож просте використання reserve не прокатить. I ще одна цiкава рiч. Може трапитись перетворення типiв. Це зручно, але треба бути уважним:
std::vector<int> veci = { 1, 2, 3 };
for(auto el:veci) std::cout << el << ' ';
std::cout << '\n';
std::vector<double> vecd;
vecd.resize(veci.size()); // можна було с початку використати конструктора std::vector(n) замiсть цього), бо iнiцiалiзацiї по замовчуванню не уникнути, хоч там як))
std::copy(veci.begin(), veci.end(), vecd.begin());
for(auto el:vecd) std::cout << el << ' ';
тому конструктор може бути швидкiшим, бо при добрiй реалiзацiї вектора, може не викликати ланцюг замовчувальних конструкторiв.
koala написав:Краще за яким саме критерієм?
Ну і так, є конструктор.Краще щодо швидкості й обсягу пам'яті, що використовується при цьому.
Все ніяк не збагну, чому вас так мучить питання швидкості, чи що краще.. Ніщо не краще, не існує срібної кулі. Ви намагаєтесь порівнювати якісь абстрактні речі у вакуумі. Якщо ви підходите до питання оптимізацій, то це комплексна задача, від аналізу даних до фактичних замірів на конкретному залізі.
P.S. Якщо не певні у якомусь стандартному алгоритмі – не використовуйте його, краще напишіть самі, циклом. Як мінімум точно будете розуміти, що там відбувається.
Все ніяк не збагну, чому вас так мучить питання швидкості, чи що краще..
Людина знайомиться з алгоритмами i бажає взнати як воно там вiдбувається.
wander написав:Все ніяк не збагну, чому вас так мучить питання швидкості, чи що краще..
Людина знайомиться з алгоритмами i бажає взнати як воно там вiдбувається.
Людина страждає двома хворобами початківця: бажанням одразу робити все ідеально та небажанням самостійно досліджувати питання. Вбивча комбінація, але колись воно мине... у той чи інший спосіб.
У початкiвця є багато труднощiв, про якi ми вже забули i нездатнi їх побачити. Тобто форум для того й iснує. А враховуючи, що ТС чи не єдиний збуджувач спокою, то й поготiв) Менi, особисте, прикро згадувати як ми холодно сприняли його спробу використати count_if. А вона була добра. До того ж то був крок до std, що не менш важливо. Та й зараз, питання досить цiкаве. Я потiм поясню думку.
Це не труднощі початківця, це аби-який підхід до навчання. Бачу перші теми (тут на форумі) автора по С++ з 2018 року.. Та й це питання далеке від "знайомства з алгоритмами", а питань штибу "що краще" точно вже кілька штук було на форумі від ТСа. Іноді бездіяльність краще за ведмежу послугу.
Це не труднощі початківця, це аби-який підхід до навчання. Бачу перші теми (тут на форумі) автора по С++ з 2018 року.. Та й це питання далеке від "знайомства з алгоритмами", а питань штибу "що краще" точно вже кілька штук було на форумі від ТСа. Іноді бездіяльність краще за ведмежу послугу.
Я далекий вiд того, щоб квалiфiкувате, що це, а що не це. Можу лише визназничити, що намагання застосувати iнструмент до того моменту як прийшло розумiння як вiн працює, змiнилося на бажання взнати як вiн працює. Це крок у вiрному напрямi. А щодо самостiйних эксперементiв, то воно с часом прийде. Головне те що є зацiкавлення.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися