Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать вектор массивов? 
V
    Опции темы
d2e8k
Дата 6.9.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 20.9.2005

Репутация: нет
Всего: нет



Здравствуйте!
Можно ли создать вектор массивов в С++? Не могу понять что не так: 

Код

  int arr1[2];
  vector <int[2]> vec;

  arr1[1]=11;
  arr1[2]=12;

  vec.push_back (arr1);


На это получаю ошибку:
/usr/include/g++/stl_vector.h: In method `void vector<int[2],allocator<int[2]> >::_M_insert_aux(int (*)[2], const int (&)[2])':
/usr/include/g++/stl_vector.h:325:   instantiated from here
/usr/include/g++/stl_vector.h:593: invalid initializer

Заранее благодарен.
PM MAIL   Вверх
xTr1m
Дата 6.9.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: 1
Всего: 1



по-моему ето не определено в STL, дл9 етого исползуй bloob
но могу ошибатьс9
PM MAIL WWW ICQ   Вверх
Sceptik
Дата 6.9.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.8.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



d2e8k, инкапуслируй массив..
Код

struct{
int value[2];
}INT2;


и вообще обрисуй картину, зачем тебе это надо. Тогда получишь конкретнуюю помощь.

Это сообщение отредактировал(а) Sceptik - 6.9.2006, 17:50
PM MAIL ICQ   Вверх
Damarus
Дата 6.9.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(d2e8k @  6.9.2006,  18:27 Найти цитируемый пост)
Не могу понять что не так: 

Так нельзя.

Кроме того, здесь:
Цитата(d2e8k @  6.9.2006,  18:27 Найти цитируемый пост)
arr1[1]=11;
arr1[2]=12;

выход за пределы массива.

Вариант:
Код

std::vector<int> arr1(2);
std::vector<std::vector<int>> vec;

arr1[0] = 11;
arr1[1] = 12;

vec.push_back(arr1);


Это сообщение отредактировал(а) Damarus - 6.9.2006, 17:53
PM MAIL ICQ Jabber   Вверх
Sceptik
Дата 6.9.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.8.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Damarus
Ктруто).. и ты подарил ему массив с дополнительной информацией).. sizeof(std::vector<>) == 16 байт.
PM MAIL ICQ   Вверх
Daevaorn
Дата 6.9.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Sceptik @  6.9.2006,  18:56 Найти цитируемый пост)
Ктруто).. 

Круто! А ты живешь в каменном веке и у тебя 1kb памяти всего?smile
PM MAIL WWW   Вверх
Sceptik
Дата 6.9.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.8.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



PM MAIL ICQ   Вверх
Remiznik
Дата 6.9.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



а может ктонибуть обьяснит чем вектор масив отличаеться от простого масива ? 
PM MAIL   Вверх
bsa
Дата 6.9.2006, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Вектор - это динамический массив. т.е. фактически он хранит указатель на начало блока данных, на конец и на конец выделенной памяти (что-то забыл?). В процессе работы количество элементов может меняться, как в сторону увеличения, так и в сторону уменьшения.

Обычный массив (например, int a[2]) - это просто две ячейки памяти выделенные под данные (в данном случае две ячейки типа int). В процессе работы программы количество ячеек меняться не может, как и их месторасположение в ОЗУ.

Вектор массивов - это, имхо, извращение. Особенно, когда массив - два числа. В данном случае логично использовать именно структуру вместо массива. А когда элементов массива будет много, то можно использовать вектор векторов - проигрыш в объеме занимаемой памяти незначительный, а скорость повыше...

Это сообщение отредактировал(а) bsa - 6.9.2006, 23:28
PM   Вверх
GremlinProg
Дата 7.9.2006, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



вот пример двумерного динамически-линейного массива без использования стл:
Код

    int(&x)[1][3]    = *(int(*)[1][3])malloc(5*3*sizeof(int));
    x[0][0]    = 1;
    x[1][0]    = 2;
    free(&x);

размерность [1][3] условная, ключевой момент при распределении памяти. [5][3] - реальная размерность массива. Точно так же без проблем можно создать и n-мерный, но плавающей всегда останется первая граница.

Это сообщение отредактировал(а) GremlinProg - 7.9.2006, 01:25


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0928 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.