如何剥离vector容器并返回数组
How to strip away vector container and return an array?
当读入文件时,通过vector来分配内存是很方便的:
someType* readCSV() {
std::vector<someType> vec;
someType x;
...
while(fscanf(f, parser, &x) != EOF) {
vec.push_back(x);
getc(f); // skip comma
}
return &vec[0];
}
但我只是想返回一个正常的数组(我与CUDA工作后,其API使用指针)。
所以问题是vec
在函数调用结束时是否超出范围会破坏它包含的数据,如果有什么我可以做的,保存它。
在函数中分配内存时,如果事后不清理内存,就不可能不丢失内存。
可以将函数包装到存储vector的类中。然后,您就可以返回指针,并且数据将被保存。
class csvReader
{
public:
csvReader (void) {}
type* readCSV (void)
{
type x;
while(fscanf(f, parser, &x) != EOF) {
vec.push_back(x);
getc(f); // skip comma
}
return vec.data();
}
private:
std::vector<type> vec;
};
是的,根据你声明它的方式,那么向量是在堆栈上分配的,因此当超出作用域时,你返回的引用将无效。
你可以有很多解决方案:
- 向函数传递一个向量,以便调用者负责其分配和释放
- 使用动态数组(如
someType *array = new someType[vec.size()]
),您将负责通过delete[] array
释放它 - 返回向量本身,以便在退出函数(
return vec
)时将其压入堆栈而不释放。
相关文章:
- 从 C++ 中的函数返回数组地址问题
- 如何在 c++ 函数中返回数组
- 如何从 c++ 中的函数返回数组
- 为什么 c++ 函数可以正确返回数组的大小?
- 解释通过从函数引用返回数组的语法
- (C++)我的函数不返回数组
- 如何按 C++ 中的值从函数返回数组
- 返回数组中值的指针地址
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 使用数组类返回数组c++
- 如何使函数返回数组?用于制作在VB.NET中使用的DLL
- 从函数 BY VALUE 返回数组,返回结构时会发生什么?
- 调用和打印函数,在 C++ 中返回数组
- 如何使用递归函数返回数组中整数的索引?
- 从函数返回数组时是否需要删除
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- C++返回数组而不进行动态内存分配?
- 在函数 c++ 中返回数组时出现问题
- 如何从C 中的函数返回数组
- 如何使类函数返回数组,然后将其调用并存储在 main 中