我有以下代码,它遍历 pqxx::result
vector 的结果行。
std::unique_ptr<std::vector<pqxx::result::tuple>>
filteredRowsPtr = getFilteredAssignmentRowsPtr(unfilteredRows);
std::vector<pqxx::result::tuple> filteredRows = *filteredRowsPtr;
for(int i = 0; i < filteredRows.size(); i++)
{
returnMap[occurenceStudentIdStr] = returnMap[occurenceStudentIdStr] + 1;
pqxx::result::tuple currRow = filteredRows[i];
for(int j = 0; j < currRow.size(); j++)
{
std::cout << "j = " << currRow[j] << endl;
}
}
filteredRowsPtr
是 unique_ptr
到 vector<pqxx::result::tuple>
这是通过以下方法产生的:
std::unique_ptr<std::vector<pqxx::result::tuple>>
CompletedExcersisesPerStudent::getFilteredAssignmentRowsPtr(pqxx::result unfilteredRows)
{
std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
std::vector<pqxx::result::tuple> filteredRows = filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);
return std::make_unique<std::vector<pqxx::result::tuple>>(filteredRows);
}
vector 已填充(因为调用 size()
返回正数)并且我可以很好地迭代它,但是当我尝试使用
currRow[j]
我遇到了段错误。
但是:当我替换对 getFilteredAssignmentsRowPtr()
的调用时使用以下内容,从而替换该方法的内容:
std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
std::vector<pqxx::result::tuple> filteredRows = filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);
输出预期的结果,没有任何段错误。
我做错了什么?提前致谢!
最佳答案
您的错误似乎不可重现(因为您未能提供最小可验证完整示例),但您的设计无论如何都有缺陷:不要使用 s td::unique_ptr<std::vector>
. std::vector
已经支持内存管理,所以你不需要添加 unique_ptr
. IHMO,正确的设计更像是
std::vector<pqxx::result::tuple>
getFilteredAssignmentRowsPtr(pqxx::result unfilteredRows)
{
return filter.getRowsWithValidAssignmentTimes(
filter.getRowsWithValidGradePercentile(unfilteredRows));
}
auto filteredRows = getFilteredAssignmentRowsPtr(unfilteredRows);
for(int i = 0; i < filteredRows.size(); i++)
{
returnMap[occurenceStudentIdStr] = returnMap[occurenceStudentIdStr] + 1;
auto currRow = filteredRows[i];
for(int j = 0; j < currRow.size(); j++)
{
std::cout << "j = " << currRow[j] << endl;
}
}
关于从其他方法返回 vector 时,C++ 无法访问 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44050951/