0

我知道我们不能有多维向量。但是我考虑过将向量的单元格定义为指针,这样可以模拟一个二维向量。这是代码:

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 会按顺序读取图像,因此我尝试借助两个嵌套的 for 循环来分离图像的各个部分。
例如,假设图像是位深度为 16 且大小为 300x400 的 RGB 图像(具有三个波段),则 separatedBitsBands 将是一个大小为 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(..............)???
最重要的是,使用多维向量对性能和速度有很大影响吗?
非常感谢。
任何帮助,将不胜感激。

4

1 回答 1

2

我知道我们不能有多维向量

可以使用 2D 向量,例如:

vector< vector<char> > SeperateBitsBands;

请注意:在声明向量的向量时,请注意不要将两个 > 放在一起,如下所示:

vector<vector<char>> SeperateBitsBands;

因为这个>>会被编译器误认为是右移运算符。

于 2013-07-13T07:30:41.123 回答