容器类型的容器,不懂了!

ny1986 2015-10-21 02:08:18
最近在学习OpenCV2的RANSC算法,其中比率测试函数代码如下:

int RobustMatcher::ratioTest(std::vector<std::vector<cv::DMatch> >
&matches)
{
int removed = 0;
// for all matches
for (std::vector<std::vector<cv::DMatch> >::iterator
matchIterator = matches.begin();
matchIterator != matches.end(); ++matchIterator)
{
// if 2 NN has been identified
if (matchIterator->size() > 1)
{
// check distance ratio
if ((*matchIterator)[0].distance /
(*matchIterator)[1].distance > ratio)
{
matchIterator->clear(); // remove match
removed++;
}
}
else
{ // does not have 2 neighbours
matchIterator->clear(); // remove match
removed++;
}
}
return removed;//返回被删除的点数量
}


上述代码有两点不明白:
1,std::vector<std::vector<cv::DMatch> >。这里出现了一个容器类型的容器,到底是什么意思?直接不懂了
2,用上述容器类型的容器的iterator类型定义了一个迭代器matchIterator,为什么它还有size()和clear()等操作,难道它是一个容器吗?

请高手们指点一下,谢谢。
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31622049 2015-11-30
  • 打赏
  • 举报
回复
楼主,你还要这种容器类型的容器的操作例子吗?
ny1986 2015-10-23
  • 打赏
  • 举报
回复
明白了,谢谢大家的帮助!
wangafei1988 2015-10-21
  • 打赏
  • 举报
回复
这样解释:

typename std::vector<int> CIntArr;
			std::vector<CIntArr> vec; // 你就把CIntArr看成一个 int arr[n];就是一个新的数据结构
			std::vector<CIntArr>::iterator iter; // 这里就是 CIntArr*;
			CIntArr* pArr = iter;
			CIntArr& arr = *iter;
			arr.push_back(0); // 即 CIntArr中加入一个元素
			arr.push_back(1);
			int n = arr[0];
Saleayas 2015-10-21
  • 打赏
  • 举报
回复
这是模板。 C++ 下 看看 template 就知道了。
www_adintr_com 2015-10-21
  • 打赏
  • 举报
回复
就是数组的数组,相当于二维数组的功能,有啥绕不过来的吗 迭代器概念上就相当于指针,int 数组的迭代器就是 int*, 数组的数组的迭代器就是 数组的指针, matchIterator 的 size 和 clear 都是调用的它指向的数组的方法,不是迭代器本身的。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧