C++ 如何有效地将std::vector的子向量作为参数传递(不拥有函数)

C++ 如何有效地将std::vector的子向量作为参数传递(不拥有函数),c++,opencv,C++,Opencv,我正在尝试使用一个opencv函数,该函数在其他参数中接受std::vector。在我的程序中,我有一个std::vector worldPoints和另一个std::vector掩码,它们的维数都比我想要发送的要大 我想做的是尽可能高效地将具有相应非零掩码的条目传递给opencv函数 std::vector<cv::Point3f> worldPointsSubset; for (int i=0; i<mask.size(); i++) { if (mask[i] !

我正在尝试使用一个opencv函数,该函数在其他参数中接受std::vector。在我的程序中,我有一个std::vector worldPoints和另一个std::vector掩码,它们的维数都比我想要发送的要大

我想做的是尽可能高效地将具有相应非零掩码的条目传递给opencv函数

std::vector<cv::Point3f> worldPointsSubset;
for (int i=0; i<mask.size(); i++) {
    if (mask[i] != 0) {
        worldPointsSubset.push_back(worldPoints[i]);
    }
}

// Then use worldPointsSubset in function
是否有其他方法,可能不涉及数据复制


编辑1:我所指的函数是

您调用的函数需要点3f的向量,因此如果您只有一个屏蔽向量,那么您必须首先复制数据。如果函数不接受向量及其掩码,则无法解决此问题


若要查看此副本是否存在问题,必须首先测量性能下降,并查看此副本是否存在瓶颈。如果这是一个瓶颈,首先要计算您需要的点数,并在worldPointsSubset中保留该容量。

没有副本,无法将数据从std::vector转换为std::vector,因为尽管您看到相同的值,但数据的大小可能不同

但是,您可以将处理std::vector的数据类型更改为std::vector,并直接使用cv::Point3f,并在需要时将其传递给solvePnPRansac