[英]array of pointers to vector of pointers
正如有人指出的那样,使用数组向量看起来通常比使用指针数组更合理; 所以在这里我有一个指针数组,我想将其转换为数组向量:
char ** ptr;
char * ptrContiguous;
ptr = new char*[numChannels];
ptrContiguous = new char[x*y*byteSize*nC*nM*nZ*nT];
char * p = ptrContiguous;
for(int i = 0; i < numChannels; i++)
{
ptr[i] = p;
p += x*y*byteSize;
}
我的问题是:只有ptr需要转换为向量吗? 有人可以编写一些简单的代码来说明数组到矢量转换吗? 谢谢。
这是你的实际代码:
char ** ptr;
char * ptrContiguous;
ptr = new char*[numChannels];
ptrContiguous = new char[x*y*byteSize*nC*nM*nZ*nT];
char * p = ptrContiguous;
for(int i = 0; i < numChannels; i++)
{
ptr[i] = p;
p += x*y*byteSize;
}
现在,如果您使用STL中的向量,您的代码就变成了这样:
std::vector<std::string> ptr;
ptr.resize(numChannels);
std::string ptrContiguous;
ptrContiguous.resize(x*y*byteSize*nC*nM*nZ*nT);
const int part_size = x*y*byteSize;
for(int i = 0; i < numChannels; i++)
{
ptr[i] = std::string(ptrContiguous.begin() + i * part_size, ptrContiguous.begin() + (i+1) * part_size);
}
此外, 这个关于矢量和字符串的 链接应该可以帮到你。 这是我建议你的代码,不知道ptrContiguous
的目的是ptrContiguous
。
尝试这个(为了代码清晰,重命名了一些变量,使用C风格的内存管理,因为这基本上是C代码,但是如果你不熟悉malloc
和free
,请告诉我):
char **short_strings; // short_strings[i] is the ith "short string"
char *long_string;
ptr = malloc(sizeof(char*) * num_short_strings);
long_string = malloc(sizeof(char) * num_short_strings * short_string_length);
char *p = long_string;
for(int i = 0; i < num_short_strings; i++)
{
short_strings[i] = p;
p += sizeof(char) * short_string_length;
}
注意,C ++ new
/ delete
和C风格的malloc
和free
都不允许你为short_strings[i]
释放内存(例如通过调用free(short_strings[i])
或delete[] short_strings[i]
。这是因为这些动态内存分配器以块的形式分配内存,而free
和delete
只允许你删除你所分配的整个块。如果你想能够单独删除短字符串,你需要为每个短字符串重新分配内存,并且strcpy
等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.