Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
randy92
7 / 7 / 4
Регистрация: 23.04.2014
Сообщений: 59
#1

Нужны ли в реальной практике массивы?

11.07.2014, 18:06. Просмотров 1202. Ответов 27
Метки нет (Все метки)

Вопрос такой: нужны ли в реальной практике массивы? Или это лишь пережиток С? Имеют ли массивы реальные преимущества перед векторами, например?
Почему спрашиваю - сейчас изучаю STL алгоритмы, такие как sort(), reverse(), find() и проч. и кажется это все очень удобным при использовании с векторами. Так нужны ли массивы после этого?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 18:06
Ответы с готовыми решениями:

Зачем нужны массивы, если есть обычные переменные?
Здравствуйте. У меня есть вопрос. Зачем нужны массивы, если есть обычные...

Зачем нужны обычные массивы, если есть динамические?
Всем привет! Вопрос в заголовке. Если динамический массив даёт те же и ещё...

Для чего нужны переменные, и прочее типа, константа, типы , массивы и т.к.д ?
Для чего нужны переменные, и прочее типа, константа, типы , массивы и т.к.д

Задачи приближенные к реальной работе
Привет. Думаю много кто из форумчан, уже выполнял практические задания,...

Общие вопросы для реальной работы
Привет! Скажите пожалуйста на сколько рально самостоятельно изучить С++, что бы...

27
Lers
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
11.07.2014, 18:10 #2
Если я не ошибаюсь, то массив и вектор - это одно и тоже.

Добавлено через 35 секунд
если одномерный массив
1
xod
156 / 46 / 70
Регистрация: 01.07.2014
Сообщений: 185
11.07.2014, 18:12 #3
Массивы - это будущее нашей цивилизации. Массивы позволят
создать программы с искусственным интеллектом. Вы конечно
имеете право забыть массивы, равно как и программирование.
Каждому своё. Моё мнение: мир держится на массивах!!
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 31
11.07.2014, 18:20 #4
Как минимум, для того, чтоб нормально понимать логику работы вектора Вам нужно знать массивы. И не только. А иначе какой смысл от вектора, если Вы не знаете, как он работает?
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
11.07.2014, 18:29 #5
randy92, как бы Вы реализовали свой вектор?
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 18:34 #6
Цитата Сообщение от randy92 Посмотреть сообщение
Или это лишь пережиток С
Пережиток C. Сейчас имеет смысл от них отказаться в пользу std::vector и std::array

Цитата Сообщение от randy92 Посмотреть сообщение
Имеют ли массивы реальные преимущества перед векторами, например?
Преимуществ никаких
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,569
Записей в блоге: 1
11.07.2014, 18:35 #7
ТС, напишите умножение матриц (хотя бы 2-3- мерных) на векторах. Интересно, сколько потеряете в скорости (1 порядок или больше... ) В физике (и не только в физике) для расчетов используют массивы.
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
11.07.2014, 18:35 #8
Вопрос такой: нужны ли в реальной практике массивы? Или это лишь пережиток С? Имеют ли массивы реальные преимущества перед векторами, например?
Вектор размещает данные в динамической памяти, а динамическая память выделяется медленно и печально (по сравнению с памятью в стеке). Или требует аллокатора заточенного под конкретный случай.
Почему спрашиваю - сейчас изучаю STL алгоритмы, такие как sort(), reverse(), find() и проч. и кажется это все очень удобным при использовании с векторами.
Они и для обычных массивов прекрасно работают.
0
randy92
7 / 7 / 4
Регистрация: 23.04.2014
Сообщений: 59
11.07.2014, 18:36  [ТС] #9
Понятно, что двумерные массивы эффективнее векторов. Это я уже усвоил
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 18:39 #10
Цитата Сообщение от zer0mail Посмотреть сообщение
Интересно, сколько потеряете в скорости
Нисколько. За счет чего по твоему будет потеря в скорости ( тем более аж на порядок ) ?

Цитата Сообщение от randy92 Посмотреть сообщение
Понятно, что двумерные массивы эффективнее векторов. Это я уже усвоил
Нет, не эффективнее
1
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
11.07.2014, 18:39 #11
Цитата Сообщение от randy92 Посмотреть сообщение
Понятно, что двумерные массивы эффективнее векторов. Это я уже усвоил
Это зависит. Не нужно таких резких выводов. Сам по себе массив не может быть более или менее эффективным - это данные. Вопрос в том, как с ними работать. Если копать в сторону низкоуровневой оптимизации, то нужно учитывать сколько влезает в cache line и как производится обращение к памяти.
0
DrOffset
7996 / 4637 / 1127
Регистрация: 30.01.2014
Сообщений: 7,540
12.07.2014, 03:22 #12
Цитата Сообщение от Voivoid Посмотреть сообщение
Нет, не эффективнее
Такой же резкий вывод, как и этот:
Цитата Сообщение от randy92 Посмотреть сообщение
Понятно, что двумерные массивы эффективнее векторов.
-------
Цитата Сообщение от Voivoid Посмотреть сообщение
За счет чего по твоему будет потеря в скорости ( тем более аж на порядок ) ?
Не стану ничего утверждать про проценты и порядки. Т.к. реальные цифры получатся только на реальных задачах. Но вообще определенная неэффективность будет наблюдаться, например, на задаче умножения матриц, при условии, что матрица задана вектором векторов (я надеюсь автор комментария именно такие вектора имел в виду).
Кстати, на основании присутствия этой неэффективности, был продемонстрирован один из методов оптимизации основанный на шаблонах (хорошо описан в книге Н. Джосаттиса) или вот в этой статье.
Но это никак, в общем-то, не обосновывает, что именно массивы быстрее. Просто что быстрее, в данном случае, зависит от гораздо больших факторов, чем природа контейнеров.
В общем, я поддерживаю 0x10.
1
Qwertiy
821 / 629 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
12.07.2014, 03:47 #13
Цитата Сообщение от randy92 Посмотреть сообщение
сейчас изучаю STL алгоритмы, такие как sort(), reverse(), find() и проч. и кажется это все очень удобным при использовании с векторами
А с массивами чем неудобно?

Цитата Сообщение от Voivoid Посмотреть сообщение
Нет, не эффективнее
Эффективнее, как минимум, за счёт отсутствия проверок на выход за границу.
0
DrOffset
7996 / 4637 / 1127
Регистрация: 30.01.2014
Сообщений: 7,540
12.07.2014, 03:52 #14
Цитата Сообщение от Qwertiy Посмотреть сообщение
Эффективнее, как минимум, за счёт отсутствия проверок на выход за границу.
В векторе так-то (по крайней мере в релизном варианте) их тоже нет (метод at не считаем им все равно почти никто не пользуется)
0
Qwertiy
821 / 629 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
12.07.2014, 10:47 #15
Цитата Сообщение от DrOffset Посмотреть сообщение
В векторе так-то (по крайней мере в релизном варианте) их тоже нет
VS когда-то так не считала... Сейчас похоже переделали, чтоб соответствовало стандарту.
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 13:33 #16
Цитата Сообщение от Qwertiy Посмотреть сообщение
VS когда-то так не считала...
Нет, в релизе в std::vector'е никогда не было проверок

Цитата Сообщение от DrOffset Посмотреть сообщение
Просто что быстрее, в данном случае, зависит от гораздо больших факторов, чем природа контейнеров.
Никаких факторов нет, при условии использования более-менее современных компиляторов производительность будет одинаковая ( разве что фактор непонимания фундаментальных основ C++, из-за которых можно на ровном месте получить оверхед ). Вектор это простая обертка. Если приведешь мне код, в котором вектор будет уступать по производительности у массива - я найду ошибку в коде. Та статья кстати несколько не о том, но в любом случае она уже не актуальна с появлением move-семантики в C++11
0
DrOffset
7996 / 4637 / 1127
Регистрация: 30.01.2014
Сообщений: 7,540
12.07.2014, 14:44 #17
Voivoid, Ты меня совсем-совсем не понял. Я не говорил про доступ к элементам, который элементарен. Я говорил про комплексное использование, именно такое, которое было приведено в статье. Я пояснял, что вектор может быть медленее чего-либо (не обязательно массива) не из-за того, что он вектор, а из-за того, что он общий инструмент, а частные задачи, иногда эффективнее решаются с помощью специализированных. Короче говоря, мой комментарий не противоречил твоему, а лишь пояснял (даже не тебе, а ТС), что производительность - штука относительная. О ней имеет смысл говорить лишь рассматривая реальную задачу, а не сферических коней (таких как массивы и вектора). Единственное, с чем я был не согласен конкретно по твоему комментарию, так это в категоричности суждений.
И да, далеко не везде еще реально применять С++11. Да и статья лишь иллюстрация, чтобы было понятно о чем я говорю.
1
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,333
Записей в блоге: 17
12.07.2014, 14:55 #18
Цитата Сообщение от randy92 Посмотреть сообщение
Так нужны ли массивы после этого?
Нужен, для своих реализаций оптимизированных под конкретную задачу,
а также для поддержки кода "из Си". Да и вероятно есть ситуации когда не хочется подключать хедеры STL в программу.
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 15:34 #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Я говорил про комплексное использование, именно такое, которое было приведено в статье
Ну, хех, как использовать будешь - такая и производительность будет. Как будто массивы нельзя криво использовать. Будешь их на каждый чих копировать - тоже просадки по производительности будут.

В общем я все это к тому, что у вектора нет оверхеда самого по себе.
0
DrOffset
7996 / 4637 / 1127
Регистрация: 30.01.2014
Сообщений: 7,540
12.07.2014, 18:50 #20
Цитата Сообщение от Voivoid Посмотреть сообщение
Ну, хех, как использовать будешь - такая и производительность будет.
Ну дык, а я о чем?!

Цитата Сообщение от Voivoid Посмотреть сообщение
вектора нет оверхеда самого по себе.
Самого по себе оверхеда нет вообще ни у одного инструмента. Оверхед - это понятие реальной задачи, а не абстрактных инструментов. Даже на самом неэффективном алгоритме можно подобрать такой набор данных, на котором он будет в плюсе.
Вот например, вектор гарантированно зануляет байты, которые выделяет (). Если в какой-то из задач это не нужно, то это оверхед. Так, еще можно привести в пример безопасность исключений, которую обеспечивает вектор, если, например, она тоже не нужна, то это тоже оверхед. Но в отрыве от задачи - это не аргументы против вектора. Это просто факты.
0
12.07.2014, 18:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2014, 18:50

Какими средствами С++ делать захват не с веб, а с реальной камеры?
Каким образом можно осуществить захват не с веб камеры а скажем с цифровой...

Адресация переменных и всей структуры программы на реальной памяти в ОС
Доброго времени суток, Вопрос по памяти, не совсем понятно: 1. Я написал...

Какие значения нужны нужны циклу while?
#include <algorithm> #include <iostream> #include <vector> using namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru