如何打印std::vector<std::pair<cv::Mat, double>>类型,一个是2d坐标,一个是3d坐标
时间: 2024-01-20 20:02:07 浏览: 42
如果你想打印一个 `std::vector<std::pair<cv::Mat, double>>` 类型的变量,可以使用如下的代码:
```c++
#include <iostream>
#include <vector>
#include <utility>
#include <opencv2/core.hpp>
int main() {
std::vector<std::pair<cv::Mat, double>> vec = {{{1, 2}, 3.0}, {{4, 5}, 6.0}};
for (const auto& p : vec) {
std::cout << p.first << ", " << p.second << std::endl;
}
return 0;
}
```
在上面的代码中,我们首先创建了一个 `std::vector<std::pair<cv::Mat, double>>` 类型的变量 `vec`,并且为其赋值。然后,我们使用 `for` 循环遍历这个变量,对于每个元素,我们分别打印出其 `cv::Mat` 类型的 2D 坐标和 `double` 类型的 3D 坐标。需要注意的是,这里使用了 C++11 中的花括号列表初始化来初始化 `vec` 中的元素,以及使用了 `auto` 关键字来自动推导 `for` 循环中的元素类型。
相关问题
C++: 无法将std::vector<double>类型的元素添加到std::vector<std::vector<double>>中去的原因是什么
将std::vector<double>类型的元素添加到std::vector<std::vector<double>>中会导致类型不匹配的错误。这是因为std::vector<double>是一个向量,而std::vector<std::vector<double>>是一个向量的向量,其元素是向量。这意味着我们可以将std::vector<double>添加到std::vector<std::vector<double>>的末尾,但我们不能将其作为std::vector<std::vector<double>>的元素添加到向量中。
我们可以将一个std::vector<double>添加到std::vector<std::vector<double>>的末尾,因为std::vector<std::vector<double>>的元素是向量,而std::vector<double>也是一个向量,因此它可以作为std::vector<std::vector<double>>的一个元素。
如果我们想要将std::vector<double>添加到std::vector<std::vector<double>>的元素中,我们需要将std::vector<double>包装在另一个向量中。例如,我们可以使用以下代码将std::vector<double>添加到std::vector<std::vector<double>>的元素中:
```c++
std::vector<double> innerVec = {1.0, 2.0, 3.0};
std::vector<std::vector<double>> outerVec;
outerVec.push_back(innerVec);
```
在这个例子中,我们首先创建一个名为innerVec的std::vector<double>,并将其初始化为{1.0, 2.0, 3.0}。接下来,我们使用outerVec的push_back()函数将innerVec添加到outerVec中。这将创建一个新的std::vector<double>,并将其添加到outerVec的末尾。
在std::vector<std::vector<int>>删除某些std::vector<int>
在std::vector<std::vector<int>>中删除某些std::vector<int>可以使用erase-remove idiom的方法。这个方法结合了erase和remove两个函数,可以高效地删除指定的元素。
以下是删除某些std::vector<int>的步骤:
1. 使用std::remove_if函数结合lambda表达式来标记要删除的std::vector<int>。lambda表达式可以根据特定的条件来判断是否需要删除。
2. 使用std::erase函数将被标记为删除的std::vector<int>从std::vector<std::vector<int>>中移除。
下面是示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<std::vector<int>> vecOfVec = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
// 删除满足条件的std::vector<int>
vecOfVec.erase(std::remove_if(vecOfVec.begin(), vecOfVec.end(), [](const std::vector<int>& vec) {
// 根据特定条件判断是否需要删除
return vec.size() == 3; // 删除长度为3的std::vector<int>
}), vecOfVec.end());
// 输出结果
for (const auto& vec : vecOfVec) {
for (const auto& num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
}
return 0;
}
```
输出结果:
```
4 5 6
7 8 9
```