如何将未知数量的元素输出到标准容器
How to output Unknown number of element to standard container
我有以下功能:
template <class Titerator>
void detect_corners(cv::Mat const& frame, Titerator begin_corners);
它应该向begin_corners
输出4个角点和仅4个角。所以,一切都很顺利。然而,要求发生了变化,现在可以返回任意数量的角。在不失概括的情况下,处理这一问题的最佳方法是什么?。我的意思是,我不想总是使用向量而不是通用迭代器。
附言:当调用这个函数时,我不知道会得到多少个角。函数应该运行,然后它就知道了。
只需使用OutputIterator。无需更改声明,但我给出的名称说明了迭代器是OutputIterator的要求。
template <class IterOut>
void detect_corners(cv::Mat const& frame, IterOut out) {
while(condition) {
*out++ = whatever;
}
}
您可以获得任何标准容器的输出迭代器。例如,向量的后插入器:
std::vector<T> v;
detect_corners(frame, std::back_inserter(v));
C++有一个OutputIterator
概念,它允许您传入一个迭代器,您可以使用它进行写入
template <typename OutputIterator>
void detect_corners(const cv::Mat &frame, OutputIterator it) {
for (/* each corner */) {
it = corner; // Assigning to an OutputIterator
// appends an element to the container.
}
}
然后,您需要创建一个与OutputIterator
兼容的迭代器来传递给您的函数——为vector:执行此操作
detect_corners(frame, std::back_inserter(my_vector));
您还可以为不同的容器创建OutputIterator
,有关更多信息,请参阅OutputIterator概念文档。
相关文章:
- 如何从Windows应用程序输出到标准?
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用提升过程获取 shell 命令的标准输出
- 将标准输出重定向到ostream
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 十进制到八进制递归C++.以标准::字符串格式输出
- 在程序执行期间从标准输出重定向到自定义流
- 标准输出C++意外行为
- 防止 qDebug() 写入标准输出
- C++ - <<运算符重载,链表 - 地址而不是标准输出
- 标准输入输出操作如何C++完成
- 有没有办法知道C++中将打印到标准输出的大小?
- 最后推迟标准输出
- 得到~对标准输出没有回应~在黑客排名问题上
- Win32 GUI C(++) 应用将标准输出和标准输出重定向到磁盘上的同一文件
- 在标准输出中执行打印会导致数组中随机分配值
- 捕获远程进程子进程的标准输出
- 如何使用BOOST_LOG_TRIVIAL宏将任何内容记录到标准输出/标准和文件
- 在c# GUI项目上重定向标准输出+标准错误
- 如何从分离的QProcess中读取标准输出/标准错误