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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как саздать динамически двухмении масив, как саздать динамически двухмении масив 
:(
    Опции темы
carol
Дата 21.1.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



подскажите как саздать динамически двухмении масив?smile
зарание спосибо
PM MAIL   Вверх
np9mi7
Дата 21.1.2006, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Код

typedef std::vector <std::vector <int> > dynamic;



--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Fedor
Дата 21.1.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Ну, а без stl, можно сделать так:

Код

int main()
{
//Создание....
   const int M = 10;
   const int N = 20;
   int** a;
   *a = new (int*)[N];
   for (int i=0; i<N; i++)
   {
       a[i] = new int[M];
   }

//Программа....
//.......

//Удаление
   for (int i=0; i<N; i++)
   {
       delete [] a[i];
   }

   delete [] a;

   return 0;
}


Это сообщение отредактировал(а) Fedor - 21.1.2006, 01:18


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Partizan
Дата 21.1.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



а можно вообще просто динамически создать одномерный массив длины M x N... smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Dreamer_0x01
Дата 21.1.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Цитата(Partizan @ 21.1.2006, 14:41 Найти цитируемый пост)

а можно вообще просто динамически создать одномерный массив длины M x N...

а тогда вместо a[i][j] к элементам придется обращаться как a[i*M+j], или я не прав?



--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Void
Дата 21.1.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Dreamer_0x01 @ 21.1.2006, 17:39 Найти цитируемый пост)
а тогда вместо a[i][j] к элементам придется обращаться как a[i*M+j], или я не прав?

Да. Конечно, можно перегрузить T &operator ()(size_t i, size_t j) или T *operator [](size_t i), но без особой необходимости это все велоспорт. vector<vector<T> > достаточно.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Dark Elf
Дата 21.1.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://www.boost.org/libs/multi_array/doc/index.html

ИМХО лучшим выбором будет boost::multi_array


--------------------
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
TIGERоX
Дата 21.1.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


начинающий...
*


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

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



Цитата(Void @ 21.1.2006, 16:19)
Да. Конечно, можно перегрузить T &operator ()(size_t i, size_t j) или T *operator [](size_t i), но без особой необходимости это все велоспорт. vector<vector<T> > достаточно.

Думаю не всегда уместно использование таких шаблонов ведь это уменьшает скорость работы особенно при больших объемов данных ведь объекы в vector находятся не подряд друг за другом как я знаю...и думаю практически на начальном уровне очень редко используются такие штуки smile по крайней мере мною...хотя получаем гибкость в замен скорости smile

Это сообщение отредактировал(а) TIGERоX - 21.1.2006, 23:28
PM MAIL   Вверх
Void
Дата 21.1.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(TIGERоX @ 22.1.2006, 01:25 Найти цитируемый пост)
Думаю не всегда уместно использование таких шаблонов ведь это уменьшает скорость работы особенно при больших объемов данных ведь объекы в vector находятся не подряд друг за другом как я знаю...

Тебя дезинформировали. Последовательное размещение содержимого вектора гарантируется.
И шаблоны тут совершенно не причем. На шаблонах построены сверхбыстрые матричные библиотеки вроде Blitz++.
Цитата(TIGERоX @ 22.1.2006, 01:25 Найти цитируемый пост)
хотя получаем гибкость в замен скорости smile

Ручное управление двумерным массивом не факт, что еще больше тормозить не будет.

Это сообщение отредактировал(а) Void - 21.1.2006, 23:34


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
TIGERоX
Дата 21.1.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


начинающий...
*


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

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



Цитата

Тебя дезинформировали. Последовательное размещение содержимого вектора гарантируется.
И шаблоны тут совершенно не причем. На шаблонах построены сверхбыстрые матричные библиотеки вроде Blitz++.

хм интересно я думал что класс вектор построен примерно так же как класс list а случайно кода не найдется интересно посмотреть на реализацию последовательного размещения???
Цитата

Ручное управление двумерным массивом не факт, что еще больше тормозить не будет.

Я не полагал что создавать массив буду как предложил партизан с последующей перегрузкой.
PM MAIL   Вверх
DeadSoul
Дата 22.1.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(TIGERоX @ 21.1.2006, 23:54 Найти цитируемый пост)

Цитата
Тебя дезинформировали. Последовательное размещение содержимого вектора гарантируется.
И шаблоны тут совершенно не причем. На шаблонах построены сверхбыстрые матричные библиотеки вроде Blitz++.
хм интересно я думал что класс вектор построен примерно так же как класс list а случайно кода не найдется интересно посмотреть на реализацию последовательного размещения???

Посмотри реализацию std::vector.



--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Mayk
Дата 22.1.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(TIGERоX @ 22.1.2006, 03:54 Найти цитируемый пост)

хм интересно я думал что класс вектор построен примерно так же как класс list а случайно кода не найдется интересно посмотреть на реализацию последовательного размещения???

Вы можете посмотреть код сами - он более чем открыт и расположн в INCLUDE/vector или подключаемых оттуда файлах.
Можете посмотреть параграф lib.vector(23.2.4) в стандарте C++03:
Цитата

A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized)
constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage
management is handled automatically, though hints can be given to improve efficiency. The elements of a
vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type
other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().


Кстати. В с++98 такого требования нет:
Цитата

A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized)
constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage
management is handled automatically, though hints can be given to improve efficiency.

Однако, как указывает Саттер, это выполнялось в реализациях STL.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
TIGERоX
Дата 22.1.2006, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


начинающий...
*


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

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



не смог найти реализацию функции uninitialized_fill_n smile(
на чем как понял и жиждится выделение память под vector
PM MAIL   Вверх
threef
Дата 23.1.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сил нет, специально попробовал.Вот результаты:

Код

STL-startMon Jan 23 18:02:34 2006
STL-finishMon Jan 23 18:02:48 2006
NOSTL-startMon Jan 23 18:02:48 2006
NOSTL-finishMon Jan 23 18:02:51 2006
NOSTL-startMon Jan 23 18:02:51 2006
NOSTL-finishMon Jan 23 18:02:54 2006
STL-startMon Jan 23 18:02:54 2006
STL-finishMon Jan 23 18:03:08 2006
Press any key to continue


Вот код:

Код

#define SIZE 50000
#define COUNT 1000
void STL()
{
    vector <double> z(SIZE);
    time_t T;
    T=time(NULL);
    cout<<"STL-start"<<ctime(&T);
    for(int k=0;k<COUNT;k++)
    for(int i=0;i<SIZE;i++)
    {

         z[i]=i/10.0;
    }
    T=time(NULL);
    cout<<"STL-finish"<<ctime(&T);

}
void NOSTL()
{
    double * z=new double[SIZE];
    time_t T;
    T=time(NULL);
    cout<<"NOSTL-start"<<ctime(&T);
    for(int k=0;k<COUNT;k++)
    for(int i=0;i<SIZE;i++)
    {

         z[i]=i/10.0;
    }
    T=time(NULL);
    cout<<"NOSTL-finish"<<ctime(&T);
    delete []z;
}
main()
{
   STL();
   NOSTL();
   NOSTL();
   STL();
}


Может быть, создатель STL вам еще гарантируют, что с точки зрения STL 12 сек = 3 сек ? НУ НЕ МОГУТ ДИНАМИЧЕСКИЕ структуры обрабатываться с той же скоростью, что и блок памяти. Универсальность ВСЕГДА приводит к дополнительным затратам в эксплуатации при выигрыше в скорости реализации.
PM MAIL   Вверх
Mayk
Дата 23.1.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Спокойней. В релизе со скорстью всё будет нормально.

Цитата

STL-delta: 2
NOSTL-delta: 3
NOSTL-delta: 3
STL-delta: 3

(&Delta; - это конечное время минус начальное, SIZE=50000, COUNT=2000).
Цитата

STL-delta: 7
NOSTL-delta: 7
NOSTL-delta: 7
STL-delta: 7

(SIZE=50000, COUNT=5000)

Цитата(threef @ 23.1.2006, 23:10 Найти цитируемый пост)

Может быть, создатель STL вам еще гарантируют, что с точки зрения STL 12 сек = 3 сек ? НУ НЕ МОГУТ ДИНАМИЧЕСКИЕ структуры обрабатываться с той же скоростью, что и блок памяти

Мой компилятор в состоянии заменить printf(" "); на putchar(' ');, а printf("") просто выкинуть.
Раскрыть же vector::operator[] для него просто децкая шалость :-)


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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