当从其他方法返回 vector 时,C++无法访问矢量元素
C++ cannot acces vector elements when vector is returned from other method
我有以下代码,它迭代了pqxx::result
行向量的结果。
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
是vector<pqxx::result::tuple>
的unique_ptr
,通过以下方法产生:
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);
}
向量已填充(因为在其上调用 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;
}
}
我通过将getFilteredAssignmentRows
更改为返回向量而不是您建议的唯一 ptr 以及将对pqxx::result
的引用传递给getFilteredAssignmentRows
来解决此问题,如下所示:
std::vector<pqxx::result::tuple> CompletedExcersisesPerStudent::getFilteredAssignmentRowsPtr(pqxx::result& unfilteredRows)
{
std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
return filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);
}
这是有效的,因为filter.getRowsWithValidGradePercentile
被定义为接受对pqxx::result
的引用,而不是pqxx::result
本身。
我一定是不小心看错了。
非常感谢!
相关文章:
- 序列容器 - 只能按顺序访问元素
- 我无法在用forward_as_tuple创建的元组中按类型访问元素
- 如果验证容器的大小并在同一条件语句下访问元素,这是很好的做法吗?
- 需要从字符串数组的一部分访问元素
- 从 C++ 中的 int ** 数组访问元素
- std::unordered_map如何存储和比较其密钥,以实现无需订购即可快速访问元素?
- std::array :通过智能指针访问元素的成员
- C 在类对象的向量中访问元素
- 使用迭代器访问元素
- 为什么在指针上对成员访问/元素选择有不同的运算符
- 矢量C++大小和访问元素
- 2D阵列访问元素和地址
- 使用C++迭代器访问元素
- C++可变参数模板数组/访问元素
- 向量是否比std::array多使用一个解引用来访问元素
- 来自 Mat 的 OpenCV 访问元素
- 为什么在访问元素之前在容器上使用 std::forward
- 在指向 wstring 的指针上使用 [ ] 运算符访问元素
- c++ char指针数组-不能访问元素
- 在整数和向量对的向量中访问元素