gpt4 book ai didi

c++ - vector 迭代器比较

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:23 25 4
gpt4 key购买 nike

我在比较两个 vector 中的值时遇到问题。

下面是我的程序的示例代码:

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

在此示例代码中,我必须比较两个 vector 。为此,我使用 std::sort() 对两个 vector 进行了排序。由于 vector 中的数据类型是模板(我在 vector 中使用类对象),std::sort() 无法正常工作。即,有时两个 vector 在排序后给出不同的元素顺序。

所以我也无法使用 std::equal() 函数。

作为替代解决方案,我为 twi vector 使用了两个迭代器。

然后迭代一个 vector 并在另一个 vector 中搜索该元素。为此,无法使用迭代器比较。

最佳答案

首先,您必须在此处使用 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());
};

关于c++ - vector 迭代器比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com