我知道我们不能拥有多维向量。但是我想过将矢量的单元格定义为指针,这样就可以模拟二维矢量。这是代码:
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
在这段代码中,我首先打开了一个图像,然后通过{GDAL库`中的RasterIO
函数提取其数字。当然RasterIO按顺序读取图像,所以我试图在两个嵌套for循环的帮助下分离图像的一部分。
例如,假设图像是RGB(具有三个波段),比特深度为16,大小为300x400,则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 :(得分:2)
我知道我们不能拥有多维向量
您可以拥有2D矢量,如:
vector< vector<char> > SeperateBitsBands;
请注意:在声明矢量矢量时,注意不要放两个&gt;一起如下:
vector<vector<char>> SeperateBitsBands;
因为&gt;&gt; 会被编译器误认为是右移操作符。