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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,930
Записей в блоге: 1
#1

В чем разница между вектором и массивом - C++

22.11.2011, 09:29. Просмотров 2643. Ответов 11
Метки нет (Все метки)

Я учу язык С/С++ и хотел у вас спросить в чем разница между вектором и массивом ? кроме тогдо что вектор создается vector<int> m; а массив m[5];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2011, 09:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем разница между вектором и массивом (C++):

Разница между вектором в борланде и VS - C++
Если возращять вектор внутри структуры из ф-ции то в борланде все ОК.А вот в VS size возвращяет правильное число элементов,но сами элементы...

Разница между массивом структур и очередью - C++
Поясните пожалуйста разницу между массивом структур и очередью.

В чем разница между X x; и X x()? - C++
Корректный ли этот ответ?

В чем разница между С и С++ - C++
Возник вопрос в чем жи разница между С и С++ кроме того, что в С++ есть классы а в С их нету ?

В чем разница между [] и * ? - C++
Думал, что ни в чем, но когда попытался сделать так: (в файле 1) char lc; в файле 2: extern char* lc; Компилятор ругаться не стал,...

В чем разница между malloc и new? - C++
в чем разница? что лучше использовать?

11
Сыроежка
Заблокирован
22.11.2011, 12:01 #2
Цитата Сообщение от Sylar9 Посмотреть сообщение
Я учу язык С/С++ и хотел у вас спросить в чем разница между вектором и массивом ? кроме тогдо что вектор создается vector<int> m; а массив m[5];
Вектор - это шаблонный класс. А мпссив - это составной тип. То есть вектор имеет методы, с ним связанные, а массив методов не имеет..
0
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
26.11.2016, 19:56 #3
Например какие методы имеет вектор? Я что то не пойму разницы, методы мы как и массиву так и вектору задаем одинаковые.
0
GbaLog-
Любитель чаепитий
2898 / 1354 / 333
Регистрация: 24.08.2014
Сообщений: 4,781
Записей в блоге: 1
Завершенные тесты: 2
26.11.2016, 20:05 #4
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Например какие методы имеет вектор?
Тут можно почитать.
http://en.cppreference.com/w/cpp/container/vector
Цитата Сообщение от Sylar9 Посмотреть сообщение
в чем разница между вектором и массивом ?
Основная разница - размер массива должен быть задан на этапе компиляции и это встроенный тип данных.
А ещё вектор - реализация динамического массива, т.е. он может расширяться. Ну и, соответственно, вектор имеет методы для вставки/удаления этих элементов.
0
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
26.11.2016, 20:31 #5
Получается что массив находится в стеке скомпилированной программы?
0
GbaLog-
Любитель чаепитий
2898 / 1354 / 333
Регистрация: 24.08.2014
Сообщений: 4,781
Записей в блоге: 1
Завершенные тесты: 2
26.11.2016, 21:26 #6
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Получается что массив находится в стеке скомпилированной программы?
Не уверен, что это именно так, скорее всего массивы находятся где-то в статической памяти, потому что вот такой код вполне корректен, хотя выделяем мы тут около 100Мб, а стек, как известно, около 2-4Мб.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    unsigned char arr[104857600];
    for( auto& it : arr )
    {
        it = 255;
    }
}
0
Байт
Эксперт C
16140 / 10418 / 1551
Регистрация: 24.12.2010
Сообщений: 19,720
26.11.2016, 21:31 #7
Цитата Сообщение от GbaLog- Посмотреть сообщение
скорее всего массивы находятся где-то в статической памяти,
Массив, описанный в вашем коде может находиться только в стеке, и нигде больше. Другое дело, будет ли эта программа работать, не рухнет ли сразу из-за переполнения стека.
0
GbaLog-
Любитель чаепитий
2898 / 1354 / 333
Регистрация: 24.08.2014
Сообщений: 4,781
Записей в блоге: 1
Завершенные тесты: 2
26.11.2016, 21:34 #8
Цитата Сообщение от Байт Посмотреть сообщение
Массив, описанный в вашем коде может находиться только в стеке, и нигде больше.
Ну я понимаю, что это не может быть НЕ на стеке. Но странно то, что она не падает! Поэтому я уже и начал думать, что тут что-то не так.
http://rextester.com/WMGG59074 g++
http://rextester.com/IYGCXO86293 clang
А вот vc++ рухнул. http://rextester.com/HRXZ87682 vc++
0
_Ivana
3169 / 1786 / 153
Регистрация: 01.03.2013
Сообщений: 5,004
Записей в блоге: 2
26.11.2016, 21:43 #9
Цитата Сообщение от GbaLog- Посмотреть сообщение
Но странно то, что она не падает! Поэтому я уже и начал думать, что тут что-то не так.
строка
C++
1
std::cout<<arr[1];
может поменять ваше мнение.
1
Байт
Эксперт C
16140 / 10418 / 1551
Регистрация: 24.12.2010
Сообщений: 19,720
26.11.2016, 21:44 #10
Цитата Сообщение от GbaLog- Посмотреть сообщение
странно то, что она не падает
Цитата Сообщение от GbaLog- Посмотреть сообщение
а стек, как известно, около 2-4Мб.
Максимальный размер стека зависит от массы факторов. От транслятора, его настроек, операционки и еще хз от чего. Бывает, что стеки расширяются по мере надобности. В детали этих механизмов я не вникал, просто стараюсь по мере сил стремиться к кроссплатформенности, не ищу лишних приключений на свою больную голову, и с памятью, как в стеке, так и в куче и даже статической стараюсь обращаться осторожно. И приведенные вами аргументы лишний раз доказывают правильность моего подхода
1
GbaLog-
Любитель чаепитий
2898 / 1354 / 333
Регистрация: 24.08.2014
Сообщений: 4,781
Записей в блоге: 1
Завершенные тесты: 2
26.11.2016, 22:46 #11
Цитата Сообщение от _Ivana Посмотреть сообщение
может поменять ваше мнение.
Я уже понял, что там всё из-за оптимизаций работает. Но это не точно.
С флагом -O0 тоже всё падает.
Эх. Глупая моя головушка.

Не по теме:

P.S. Давно не виделись, где Вы пропадали?


Цитата Сообщение от Байт Посмотреть сообщение
И приведенные вами аргументы лишний раз доказывают правильность моего подхода
Надо и мне такой подход взять на вооружение. А то сплошные разочарования.
0
_Ivana
27.11.2016, 00:50     В чем разница между вектором и массивом
  #12

Не по теме:

GbaLog-, я же поругался в этом разделе, пошел покорять другой - там тоже поругался, но все никак не могу закончить свой бесславный путь на форуме

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2016, 00:50
Привет! Вот еще темы с ответами:

В чем разница между new и malloc()? - C++
Всем доброго дня ! Начал читать книгу Пахомов Б. &quot;C/C++ и MS Visual C++ 2008 для начинающих&quot; До этого прочитал С++ за 21 день. ...

В чем разница между f.read(),f.write() и f<<., f>>.? - C++
В чем разница между f.read(),f.write() и f&lt;&lt;..., f&gt;&gt;...?

В чем разница между const и constexpr? - C++
Когда стоит применять constexpr? В чём его отличие от const? Если можно конкретные примеры в их различиях. Например, constexpr int m =...

В чем разница между Debug and Release? - C++
Какие действия выполняет debug в Visual studio и какие Release, в чем разница? Никогда не задавался этим фундаментальным вопросом, что...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.11.2016, 00:50
Ответ Создать тему
Опции темы

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