我想创建一个方法,它使用 std::vector
来构建数据集合,然后对数据进行一些操作,最后,我想将生成的信息传递给给定参数的指针,如以下小示例所示:
struct MyStruct
{
int* list;
int entry_count;
};
static MyStruct createList()
{
vector<int> vectorList;
MyStruct data;
vectorList.push_back(1);
vectorList.push_back(1);
vectorList.push_back(1);
vectorList.push_back(1);
vectorList.push_back(1);
data.list = &vectorList.front();
data.entry_count = vectorList.size();
return data;
}
int main(int argc, char** argv)
{
MyStruct data;
data = createList();
return 1;
}
问题是,方法关闭后, vector 被销毁,指针无处显示。
我怎样才能以正确的方式处理这个问题?那么如何才能将此集合分配给指针而不取消分配呢?
最佳答案
您需要将函数设为本地vectorList
、静态
并使用std::vector::data
用于通过指针获取底层数组。
void createList(int* list)
{
static std::vector<int> vectorList;
// ...
list = vectorList.data();
}
但是,这使得 vectorList
成为所有 createList
函数调用中的唯一实例。如果您需要不同的 vectorList
来进行不同的函数调用,我建议将所有内容包装到一个类中。
#include <vector>
class MyList /* final */
{
std::vector<int> mVectorList;
public:
// operations via functions
int* data() /* const noexcept */ // ---> provide a member to acces the underlying data
{
return mVectorList.data();
}
};
关于c++ - 将 std::vector 分配给方法内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62847030/