根据std::vector<bool>中的true删除对应的std::vector<cv::Point3f>中的元素
时间: 2024-11-22 07:34:35 浏览: 5
当你有一个`std::vector<bool>`存储了一些布尔值,其中`true`表示某个对应的位置需要从另一个`std::vector<cv::Point3f>`(三维点向量)中移除元素时,你可以通过两步操作来实现:
1. 首先,遍历布尔向量,找到所有`true`的位置索引。可以创建一个新的迭代器范围,只包含索引为`true`的元素。
```cpp
size_t indices_to_remove = std::distance(bool_vec.begin(), bool_vec.end()); // 获取true元素的数量
bool_vec.erase(std::remove(bool_vec.begin(), bool_vec.end(), true), bool_vec.end());
```
这里假设`bool_vec`是已排序的(例如,如果你使用了STL算法`std::sort`),并且你想基于它们在原向量中的顺序进行删除。
2. 然后,根据这些索引从`cv::Point3f`向量中移除元素。你需要一个`std::vector<cv::Point3f>::iterator`的范围,同样基于之前的索引。可以使用`erase`函数结合迭代器,逐个删除相应的元素。
```cpp
for (size_t i = 0; i < indices_to_remove; ++i) {
if (i < point3d_vec.size()) { // 防止越界
point3d_vec.erase(point3d_vec.begin() + i); // 移除第i个元素
}
}
```
注意:这种方法会改变两个向量的大小,因为删除操作会移动其他元素的索引。如果不想改变大小,你可以在删除前先复制剩余的元素到新的向量中。
阅读全文