矢量迭代器比较
Vector iterator comparison
在比较两个向量中的值时遇到问题。
以下是我的程序示例代码:
template <typename T> bool CompareVectors(std::vector<T> vector1, std::vector<T> vector2)
{
std::sort(vector1.begin(),vector1.end());
std::sort(vector2.begin(),vector2.end());
if (vector1.size() != vector2.size())
return false;
else
{
bool found = false;
std::vector<T>::iterator it;
std::vector<T>::iterator it2;
for (it = vector1.begin();it != vector1.end(); it++)
{
for(it2 = vector2.begin(); it2 != vector2.end(); it2++)
{
if(it == it2) // here i have to check the values in the itearators are equal.
{
found = true;
break;
}
}
if(!found)
return false;
else
found = false;
}
return true;
}
};
在这个示例代码中,我必须比较这两个向量。为此,我使用std::sort()
对两个向量进行了排序。由于矢量中的数据类型是模板(我在矢量中使用类对象),std::sort()
无法正常工作。也就是说,有时两个向量在排序后给出不同的元素顺序。
所以我也不能使用std::equal()
函数。
对于另一种解决方案,我为twi向量使用了两个迭代器。
迭代一个向量并在另一个向量中搜索该元素。为此,迭代器比较是不可用的。
首先必须在此处使用typename
关键字:
typename std::vector<T>::iterator it;
typename std::vector<T>::iterator it2;
如果没有typename
,您的代码甚至无法编译。
要比较迭代器指向的值,必须执行以下操作:
if( *it == *it2)
您可以将比较函数写成:
//changed the name from CompareVectors() to equal()
template <typename T>
bool equal(std::vector<T> v1, std::vector<T> v2)
{
std::sort(v1.begin(),v1.end());
std::sort(v2.begin(),v2.end());
if ( v1.size() != v2.size() )
return false;
return std::equal(v1.begin(),v1.end(), v2.begin());
};
此行是否应该:
if(it == it2)
是
if (*it == *it2)
第一行是比较指针而不是值。
这里有多个问题。首先,你说std::sort()
不起作用。你班的operator<
超载了吗?
此外,您需要比较指向的迭代器是什么:
*it == *it2
此外,您需要同时遍历两个数组(仅一个循环):
for (it = vector1.begin(), it2 = vector2.begin();
it != vector1.end(), it2 != vector2.end();
it++, it2++) {
...
}
实际上,您应该通过重载operator==
来使用std::equal()
。
从效率的角度来看,在对数组进行排序之前,您应该先比较size()
值。
相关文章:
- C++值初始化矢量迭代器比较
- 如何从目录迭代器中选择特定文件并进行比较
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 使用迭代器的自定义比较器函数
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- 输入迭代器的相等性比较
- 空列表迭代器比较始终为真
- 自定义迭代器:如果 a 和 b 的行为不同,如何正确处理距离计算和相等比较
- 在这种情况下,可以比较无效的迭代器
- 在将迭代器与C 中的null进行比较时,编译误差
- 如何将迭代器传递到std :: lower_bound()比较函数
- 迭代器比较STL
- C++:为什么输出迭代器不支持比较操作?
- 比较迭代器和const_iterator
- 比较迭代器value_type范围构造函数
- 比较迭代器时的怪异(?)行为
- c++速度比较迭代器与索引
- 模板比较迭代器
- 比较迭代器,c++
- C++为什么我们不能使用 > 和 < 来比较迭代器?