Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
randy92
7 / 7 / 2
Регистрация: 23.04.2014
Сообщений: 59
#1

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

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

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

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

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

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

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

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

Какие значения нужны нужны циклу while? - C++
#include <algorithm> #include <iostream> #include <vector> using namespace std; int main(void) { int A={1,2,3,4,49,100,49};...

27
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 13:33 #16
Цитата Сообщение от Qwertiy Посмотреть сообщение
VS когда-то так не считала...
Нет, в релизе в std::vector'е никогда не было проверок

Цитата Сообщение от DrOffset Посмотреть сообщение
Просто что быстрее, в данном случае, зависит от гораздо больших факторов, чем природа контейнеров.
Никаких факторов нет, при условии использования более-менее современных компиляторов производительность будет одинаковая ( разве что фактор непонимания фундаментальных основ C++, из-за которых можно на ровном месте получить оверхед ). Вектор это простая обертка. Если приведешь мне код, в котором вектор будет уступать по производительности у массива - я найду ошибку в коде. Та статья кстати несколько не о том, но в любом случае она уже не актуальна с появлением move-семантики в C++11
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
12.07.2014, 14:44 #17
Voivoid, Ты меня совсем-совсем не понял. Я не говорил про доступ к элементам, который элементарен. Я говорил про комплексное использование, именно такое, которое было приведено в статье. Я пояснял, что вектор может быть медленее чего-либо (не обязательно массива) не из-за того, что он вектор, а из-за того, что он общий инструмент, а частные задачи, иногда эффективнее решаются с помощью специализированных. Короче говоря, мой комментарий не противоречил твоему, а лишь пояснял (даже не тебе, а ТС), что производительность - штука относительная. О ней имеет смысл говорить лишь рассматривая реальную задачу, а не сферических коней (таких как массивы и вектора). Единственное, с чем я был не согласен конкретно по твоему комментарию, так это в категоричности суждений.
И да, далеко не везде еще реально применять С++11. Да и статья лишь иллюстрация, чтобы было понятно о чем я говорю.
1
Avazart
Эксперт С++
7234 / 5430 / 303
Регистрация: 10.12.2010
Сообщений: 24,128
Записей в блоге: 17
12.07.2014, 14:55 #18
Цитата Сообщение от randy92 Посмотреть сообщение
Так нужны ли массивы после этого?
Нужен, для своих реализаций оптимизированных под конкретную задачу,
а также для поддержки кода "из Си". Да и вероятно есть ситуации когда не хочется подключать хедеры STL в программу.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 15:34 #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Я говорил про комплексное использование, именно такое, которое было приведено в статье
Ну, хех, как использовать будешь - такая и производительность будет. Как будто массивы нельзя криво использовать. Будешь их на каждый чих копировать - тоже просадки по производительности будут.

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

Цитата Сообщение от Voivoid Посмотреть сообщение
вектора нет оверхеда самого по себе.
Самого по себе оверхеда нет вообще ни у одного инструмента. Оверхед - это понятие реальной задачи, а не абстрактных инструментов. Даже на самом неэффективном алгоритме можно подобрать такой набор данных, на котором он будет в плюсе.
Вот например, вектор гарантированно зануляет байты, которые выделяет (). Если в какой-то из задач это не нужно, то это оверхед. Так, еще можно привести в пример безопасность исключений, которую обеспечивает вектор, если, например, она тоже не нужна, то это тоже оверхед. Но в отрыве от задачи - это не аргументы против вектора. Это просто факты.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 18:58 #21
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну дык, а я о чем?!
Ну, это по-моему и так очевидно. Об этом как-то странно речь заводить.


Я-то имел в виду всякие мифы и легенды которые сочиняют C'шники которым когда-то довелось столкнуться с C++, но разобраться с которым они до конца или не смогли или не захотели. Все что они не поняли у них автоматически переходило в категорию 'тормозная фигня' std::vector тож не избежал этой участи, лол. Ну, я не спорю, наверное на заре появления первых компиляторов C++ все действительно было не очень радужно. Но уже по меньшей мере к началу 2000-х большая часть проблем было успешна решена. Но C'шников уже не исправить, все эти мифы и легенды переходят из поколение в поколение и похоже их уже не искоренить

Цитата Сообщение от DrOffset Посмотреть сообщение
Оверхед - это понятие реальной задачи, а не абстрактных инструментов
Ну если бы скажем C++ не поддерживал inline функций, то у операции получения элемента вектора был бы вполне себе объективный недостаток по сравнению с массивом.

Кстати если уж на то пошло, то массив в первую очередь надо сравнивать с std::array
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
12.07.2014, 19:03 #22
Цитата Сообщение от Voivoid Посмотреть сообщение
Но C'шников уже не исправить, все эти мифы и легенды переходят из поколение в поколение и похоже их уже не искоренить
Очень печально, что ты меня автоматом отнес к любителям мифов.
Ты одно пойми, мне для тебя распинаться смысла нет. А вот ТС и остальные товарищи без опыта, прочитают коммент и будет у них тот же миф, только наоборот. И будут пихать они вектор во все задачи, в которые можно и нельзя, ведь на форуме же сказали, что оверхеда нет. Я же старался сделать акцент на инструменте применительно к задаче, чтобы они оценивали конкретно и комплексно, а не в общем и по-отдельности.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 19:09 #23
Цитата Сообщение от DrOffset Посмотреть сообщение
Очень печально, что ты меня автоматом отнес к любителям мифов.
Лол, ну я вообще-то не про тебя, с чего ты взял-то?

Цитата Сообщение от DrOffset Посмотреть сообщение
И будут пихать они вектор во все задачи, в которые можно и нельзя
И это кстати будет значительно лучше. С векторами-то побезопаснее будет, хоть с памятью проблем будет меньше чем если бы руками они все в массивах бы копошились. А на производительность пофиг, все равно уровень задач не тот.
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
12.07.2014, 19:16 #24
Цитата Сообщение от Voivoid Посмотреть сообщение
меньше чем если бы руками они все в массивах бы копошились
Ну а я не предлагал жесткую альтернативу: если не вектор, то копошимся руками в массивах.

Добавлено через 50 секунд
Цитата Сообщение от Voivoid Посмотреть сообщение
А на производительность пофиг, все равно уровень задач не тот.
Ну это смотря у кого
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 19:24 #25
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну а я не предлагал жесткую альтернативу: если не вектор, то копошимся руками в массивах.
В смысле? А какие могу быть еще варианты? Или std::vector( std::array ) или голый массив. В случае с голым массивом ручной работы больше.

Цитата Сообщение от DrOffset Посмотреть сообщение
Ну это смотря у кого
Очевидно, что у
Цитата Сообщение от DrOffset Посмотреть сообщение
остальные товарищи без опыта
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
12.07.2014, 19:34 #26
Цитата Сообщение от Voivoid Посмотреть сообщение
А какие могу быть еще варианты? Или std::vector( std::array ) или голый массив. В случае с голым массивом ручной работы больше.
Как будто мало на свете контейнеров с подобной семантикой.

Мне вот, кстати, из-за зануления вектором своей памяти, как-то таки пришлось писать альтернативный контейнер для хранения исключительно POD-типов.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
12.07.2014, 19:53 #27
Цитата Сообщение от DrOffset Посмотреть сообщение
Мне вот, кстати, из-за зануления вектором своей памяти, как-то таки пришлось писать альтернативный контейнер для хранения исключительно POD-типов.
И какие результаты стали?
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
12.07.2014, 20:51 #28
Цитата Сообщение от Voivoid Посмотреть сообщение
И какие результаты стали?
Порядка 5% выигрыш в скорости на общей сумме чтение-запись. Вектор использовался в качестве временного буфера для текстовых данных. В стиле выделили память, считали данные в контейнер - работаем, закончили работать, данные освободили и т.д. много-много раз. Сразу говорю, железо - не x86. На той задаче эти 5% позволили уложиться в требование ТЗ на задержки при передаче и обработке данных.
0
12.07.2014, 20:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2014, 20:51
Привет! Вот еще темы с ответами:

Структуры данных на практике - C++
Прошел структуры данных (связные списки, стек, очередь, дерево), но когда, зачем, как часто и при каких обстоятельствах прибегают к их...

Нужны 2 программы на массивы. - QBasic
3. Найти произведения положительных и отрицательных элементов массива x(i) i=1,15 4. Задана матрица a(i;j), (i=1,3; j=1,4) . ...

Массивы.Надо поменять местами строки.(нужны пояснения) - C (СИ)
В сгенерированном массиве определённой размерности поменять местами местами определённые строки. Очень нужны пояснения, мне потом надо...

Как вручную уничтожать массивы, зная, что они уже не нужны программе - C#
Помогите разобраться. Программа выдает ошибку "System.OutOfMemoryException" на строку string MX= new string ; где hsize = 317; ...


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

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

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