我在将嵌套的std :: vector元素复制到另一个std :: vector时遇到了问题。
示例1
std::unique_ptr<std::remove_pointer_t<HMODULE>, BOOL(*)(HMODULE)> theDll(LoadLibrary("My.dll"), FreeLibrary);
示例2
std::vector<std::vector<int>> foo;
std::vector<int> temp;
std::vector<int> goo;
temp.push_back(12345);
foo.push_back(temp);
goo = foo[0]; //error
因此,我可以知道问题出在哪里以及如何将嵌套矢量的元素复制到另一个矢量?
编辑: 实际情况是我有嵌套的cv :: Point
矢量temp.clear();
for(int i = 0; i<foo[0].size(); i++) {temp.push_back(foo[0][i])};
goo = temp; //error
并希望将元素复制到结构中的std::vector<std::vector<cv::Point>> found_contour;
。
std::vector<cv::Point>
代码段:
struct Contours
{
std::vector<cv::Point> contour;
cv::RotatedRect minRect;
cv::RotatedRect minEllipse;
}
答案 0 :(得分:2)
cv::findContours(result,found_contour,found_hierachy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cv::Point(0,0));
std::vector<Contours> contour_struct;
contour_struct.reserve(found_contour.size()); //<-----problem
for (size_t i = 0; i < found_contour.size(); i++)
{
contour_struct[i].contour = found_contour[i];
contour_struct[i].minRect = cv::minAreaRect(cv::Mat(found_contour[i]));
}
vector::reserve
仅在内部获取空间,以便push_back
不会耗尽空间。它实际上并没有在vector
中添加更多对象。您可以改用此行:
contour_struct.resize(found_contour.size());
这将确保contour_struct
的大小合适。