将嵌套std :: vector的元素复制到std :: vector

时间:2015-07-29 07:36:25

标签: c++11 vector

我在将嵌套的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;
}

1 个答案:

答案 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的大小合适。