Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Создание двухмерного масива


Автор: Vredniy 10.11.2007, 15:25
Как создать большой стринговый джухмерный масив??
Таким способом выдает ошибку, почему 
Код

string StrArr[1500][200];

Автор: Alek86 10.11.2007, 15:44
какую ошибку?
1. помнится, когда-то где-то нельзя было больше 255 символов...
2. может std::string?
3. если пользуешь стринги (smile), то учись пользоваться и векторами (std::vector)

Автор: Vredniy 10.11.2007, 15:52
С синтаксом вроде все в порядке

1>------ Build started: Project: test2, Configuration: Debug Win32 ------
1>Compiling...
1>Skipping... (no relevant changes detected)
1>test2.cpp
1>Build log was saved at "file://c:\Documents and Settings\Hrant\My Documents\Visual Studio 2005\Projects\test2\test2\Debug\BuildLog.htm"
1>test2 - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Но когда выплывает окно коммандой строки выплывает еще одно окошко "Visual Studio Just-In-Time"  smile 

Автор: Alek86 10.11.2007, 16:09
ты стек переполняешь

уменьши размеры массива или сделай его динамическим

Автор: Vredniy 10.11.2007, 18:48
А можно пример  smile 

Автор: Alek86 10.11.2007, 18:56
я ж не знаю, что тебе нужно
можно чуть подробней?

Автор: magadan87 10.11.2007, 19:03
Цитата(Vredniy @  10.11.2007,  18:48 Найти цитируемый пост)
А можно пример  smile  


Код

float **matrix; /* объявление указателя на массив */
int row, col; /* объявление переменных под кол-во строк и столбцов*/
int i, j;  /* объявление индексов для работы с массивом */
 
printf("Enter the amount of rows & columns: ");
scanf("%d%d", &row, &col); 
 
/* выделение памяти под строки */
matrix = (float**)malloc(row * sizeof(float*));  
 
/* выделение памяти под столбцы */
for ( i =0; i<row; i++ )  
  matrix[i] = (float*)malloc(col * sizeof(float)); 
 
/* заполняем массив и сразу расспечатываем */
for(i = 0; i < row; i++)
{
  for(j = 0; j < col; j++)
  {
     matrix[i][j] = (i+j)*1.1f;
     printf("%4.1f    ", matrix[i][j]);
  }
  putchar('\n');
}
/*освобождаем память когда массив уже не нужен(как минимум в конце программы)*/
//пример динамического массива в С (при помощи функции malloc) взят с codenet

подойдёт?)

Автор: Lazin 10.11.2007, 21:53
может лучше не насиловать мосх и использовать STL
Код

std::vector<std::string> array;

это одномерный массив строк, но его можно использовать и как 2х мерный
Код

int height = 20, width = 30;
for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++)
{
   array.push_back( std::string() );//заполнение массива из height*width элементов
}
int x = 10;
int y = 5;
array[y*width + x] = "bla bla bla";//обращение к элементу с индексом x-y

если массив очень большой то лучше использовать разреженный массив, иначе будут очень большие накладные расходы на хранение указателей

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)