моделировать векторы как двумерные массивы

Я знаю, что у нас не может быть многомерных векторов. Но я думал об определении ячеек вектора как указателей, и таким образом имитирую двухмерный вектор. Вот код:

const char* filename = "D:\\desktop\\IP_ABAD\\images\\1.png";
GDALDataset  *poDataset = NULL ;
GDALAllRegister();

poDataset = (GDALDataset *) GDALOpen( filename, GA_ReadOnly );
const int RasterXSize = poDataset -> GetRasterXSize();
const int RasterYSize = poDataset -> GetRasterYSize();
const int RasterCount = poDataset -> GetRasterCount();
CPLErr error = CE_None;
GDALRasterBand *poRasterBand;
poRasterBand = poDataset -> GetRasterBand(1);
GDALDataType eType;
eType = poRasterBand -> GetRasterDataType();
int nbpp = GDALGetDataTypeSize(eType) / 8;
vector<unsigned char> data(RasterXSize * RasterYSize * RasterCount * nbpp);
error = poDataset -> RasterIO(GF_Read,0,0,RasterXSize,RasterYSize,&data[0],RasterXSize,RasterYSize,eType,RasterCount,0,0,0,0);
vector<unsigned char*>SeperateBitsBands(RasterCount * nbpp);
int sizeOfData = (int)data.size();
int sizeOfSeperateBitsBands = (int)SeperateBitsBands.size();
for (int i = 0 ; i < sizeOfSeperateBitsBands ; i++)
{
for ( int j = 0 ; j < sizeOfData ; j++ )
{
if (j%sizeOfSeperateBitsBands == i)
{
SeperateBitsBands[i]-> pushback(data.at(j));
}
}
}

Но в линии SeperateBitsBands[i]-> pushback(data.at(j)); Я получаю ошибки:

IntelliSense: expression must have pointer-to-class type
error C2227: left of '->pushback' must point to class/struct/union/generic type

В этом коде сначала я открыл изображение и извлек его цифровые числа RasterIO функция из ‘библиотеки GDAL`. Конечно, RasterIO читает изображение последовательно, поэтому я попытался разделить части изображения с помощью двух вложенных циклов.
Например, предположим, что изображение является RGB-изображением (имеет три полосы) с битовой глубиной 16 и размером 300×400, тогда seperatedBitsBands будет вектором с размером 6, каждая ячейка которого указывает на вектор с размером 120000.
В прошлый день у меня был такой код:

vector<GDALRasterBand*>Bands(RasterCount);
for ( i = 0; i<RasterCount; i++)
{
Bands.at(i) -> RasterIO(..............)
}

Но у меня не было такой ошибки в строке Bands.at(i) -> RasterIO(..............),
Может ли кто-нибудь сказать мне, что я могу сделать что-то подобное? (Я имею в виду симуляцию 2D вектора). Если так, то как ???
И почему у меня не было ошибки в Bands.at(i) -> RasterIO(..............)???
И что наиболее важно, влияет ли использование многомерных векторов на производительность и скорость?
Большое спасибо.
Любая помощь будет оценена.

0

Решение

Я знаю, что у нас не может быть многомерных векторов

Вы Можно иметь двухмерные векторы, такие как:

vector< vector<char> > SeperateBitsBands;

пожалуйста, обратите внимание : При объявлении вектора векторов будьте осторожны, чтобы не сложить два> следующим образом:

vector<vector<char>> SeperateBitsBands;

как это >> будет ошибочно принят компилятором за оператор смещения вправо.

2

Другие решения

Других решений пока нет …