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

C++语言 码拜 6年前 (2015-10-22) 510次浏览
最近在学习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()等操作,莫非它是一个容器吗?
请高手们指点一下,谢谢。

解决方案:30分
就是数组的数组,相当于二维数组的功能,有啥绕不过来的吗
迭代器概念上就相当于指针,int 数组的迭代器就是 int*,  数组的数组的迭代器就是 数组的指针, matchIterator 的 size 和 clear 都是调用的它指向的数组的方法,不是迭代器本身的。
解决方案:20分
这样解释:

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];

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明容器类型的容器,不懂了!
喜欢 (0)
[1034331897@qq.com]
分享 (0)