Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Массив и переменные / 12 сообщений из 12, страница 1 из 1
05.12.2005, 16:39
    #33417760
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
ся не позволяет обьявлять размер массива с помощью переменной:
int w=100;
int h=300;
BYTE c[width][height];
как это обойти?
вектор не катит - мне нужен именно массив
C ув. Tors
...
Рейтинг: 0 / 0
05.12.2005, 16:53
    #33417810
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
C или C++ ?

в С++ используй new
в С - malloc
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.12.2005, 16:55
    #33417822
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
c++
пример плиз
C ув. Tors
...
Рейтинг: 0 / 0
05.12.2005, 16:57
    #33417831
spectre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
Или
Код: plaintext
1.
2.
const int w =  100 , h =  200 ;
int a[w][h];
или
Код: plaintext
1.
2.
3.
#define w  100 
#define h  200 
int a[w][h];
Или динамически (на мой взгляд лучший вариант, особенно если не знаешь заранее размерности).
...
Рейтинг: 0 / 0
05.12.2005, 17:00
    #33417841
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
int *p=new int[MAX];
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.12.2005, 17:03
    #33417855
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
авторconst int w = 100, h = 200;
int a[w][h];

5 билдер выдаёт
констант экспрессион рекьюирэд

авторint *p=new int[MAX];

А двумерный
C ув. Tors
...
Рейтинг: 0 / 0
05.12.2005, 17:04
    #33417860
spectre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
Динамически лучше так:
Код: plaintext
1.
2.
3.
4.
5.
int w =  100 , h =  200 ;
int** a;
a = new int*[w];
for (int j =  0 ; j < w; j++)
  a[j] = new int[h];
...
Рейтинг: 0 / 0
05.12.2005, 17:39
    #33417954
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
Нет уж, от задачи зависит, как лучше.

Думаю, в данном случае, лучше так:

int *p=new int[WIDTH*HEIGHT];

p[x+y*WIDTH]
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.12.2005, 17:54
    #33417989
spectre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
Карабас Барабас
Нет уж, от задачи зависит, как лучше.

Думаю, в данном случае, лучше так:

int *p=new int[WIDTH*HEIGHT];

p[x+y*WIDTH]


Реально, если сравнить, как выделяется память в динамической области, это одно и тоже. А вот работать с двумерным массивом как с двумерным массивом, как по мне, так приятнее.
...
Рейтинг: 0 / 0
06.12.2005, 06:56
    #33418492
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
spectre
Код: plaintext
1.
2.
for (int j =  0 ; j < w; j++)
  a[j] = new int[h];
просить у системы память, скажем, 100000 раз - это неудобно, а потом еще освобождать ее незабыть ....
...
Рейтинг: 0 / 0
06.12.2005, 08:41
    #33418558
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
#include <vector>
#include <iostream>

template <typename T>
class array2
{
public:
  array2(){};
  array2(int r, int c)
  {
	rows=r;
	cols=c;
    for(int i= 0 ; i<rows; ++i)
    {
      data.push_back(std::vector<T>(cols));
    }
  }
  

  inline std::vector<T> & operator[](int i) { return data[i]; }

  inline const std::vector<T> & operator[] (int i) const { return data[i]; }
  int rows, cols;
private:
  std::vector<std::vector<T> > data;  
};
  
void myprint(array2<int> &a)
	{
	for(int i= 0 ; i<a.rows; ++i)
		{
		for(int j= 0 ; j<a.cols; ++j)
			{
			std::cout << a[i][j] <<"  ";
			}
		std::cout << std::endl;
		}
	}
int main()
 {
 int ii, jj;

 ii= 10 ;
 jj= 3 ;

 array2<int>a(ii,jj);

 for(int i= 0 ; i<ii; ++i)
   for(int j= 0 ; j<jj; ++j)
     {
     a[i][j] = i+j;
     }

 myprint(a);
 return  0 ;
 }

...
Рейтинг: 0 / 0
06.12.2005, 17:27
    #33420359
luser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив и переменные
class Matrix
{
public:
Matrix(int rowCount, int colCount)
{
_items = new int[rowCount * colCount];
_rowCount = rowCount;
_colCount = colCount;
}
~Matrix()
{
delete [] _items;
}
int get(int rowIndex, int colIndex)
{
return _items[rowIndex * _rowCount + colIndex];
}
void set(int rowIndex, int colIndex, int value)
{
_items[rowIndex * _rowCount + colIndex] = value;
}
private:
int *_items;
int _rowCount;
int _colCount;
};

ЗЫ, не мое. Но нравиться. И работает нормально. Если патерном сделать, будет саФсем хАрашо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Массив и переменные / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]