将向量的元素强制转换为用户定义的类型
Cast elements of vector to user defined type
我正在寻找一种好的现代方法,将向量的所有元素强制转换为cv::Point
或其他用户定义的结构类型:
struct ColorSpacePoint
{
int X;
int Y;
}
struct NewColorSpacePoint
{
int X;
int Y;
}
std::vector<ColorSpacePoint> points{ColorSpacePoint{2,3}, ColorSpacePoint{9,6}};
std::vector<NewColorSpacePoint> = ...
std::vector<cv::Point> = ...
您可以向ColorSpacePoint
:添加一个转换运算符
struct ColorSpacePoint
{
int X;
int Y;
operator NewColorSpacePoint() { return {X,Y}; }
};
或者NewColorSpacePoint
:的非显式构造函数
struct NewColorSpacePoint
{
int X;
int Y;
NewColorSpacePoint (const ColorSpacePoint& rhs) : X{rhs.X}, Y{rhs.Y} {}
};
这将允许您只使用std::vector
范围构造函数:
std::vector<NewColorSpacePoint> new_points {points.begin(), points.end()};
如果您不想使用隐式转换,可以制作一个免费函数并使用std::transform
:
NewColorSpacePoint to_new_color (const ColorSpacePoint& csp) {
return {csp.X,csp.Y};
}
std::vector<NewColorSpacePoint> new_points;
new_points.reserve(points.size());
std::transform(points.begin(), points.end(),
std::back_inserter(new_points), to_new_color);
添加从ColorSpacePoint
到NewColorSpacePoint
和cv::Point
的转换运算符,例如:
struct NewColorSpacePoint
{
int X;
int Y;
};
struct ColorSpacePoint
{
int X;
int Y;
operator NewColorSpacePoint() { return {X, Y}; }
};
然后使用std::vector
的构造函数,该构造函数以迭代器的范围为参数:
std::vector<ColorSpacePoint> points{ColorSpacePoint{2,3}, ColorSpacePoint{9,6}};
std::vector<NewColorSpacePoint> new_points(points.begin(), points.end());
或者使用std::vector::insert
:
std::vector<NewColorSpacePoint> new_points;
new_points.insert(new_points.end(), points.begin(), points.end());
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- Visual C++(VS2017)中用户定义的转换不明确
- 使用用户定义的参数调用future/async并调用类方法
- 带有用户定义类的c++折叠表达式
- g++用户定义的动态链接库上的全局new和delete运算符
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 修改"std::set"中用户定义类型的值
- 参数包构造函数在类模板中隐藏用户定义的转换
- MAKE:找不到包含的用户定义的头文件?
- C++:用户定义的显式类型转换函数错误
- 从用户定义的类生成格式字符串?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- C++ 向量与用户定义的类比较?(==, <, >)
- STL 用户定义的二进制操作
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- C++:用户定义的类,以成员字段作为地址