我有以下代码
#include <iostream>
#include <vector>
using namespace std;
int distance(vector<int>& set1, vector<int>& set2) {
int distance = 0;
unsigned int i1 = 0;
unsigned int i2 = 0;
while(i1 < set1.size() && i2 < set2.size()) {
if(set1[i1] == set2[i2]) {
++i1; ++i2;
} else {
++distance;
set1[i1] < set2[i2] ? ++i1 : ++i2;
}
}
unsigned int zero = 0;
distance += std::max(set1.size() - i1, zero) + std::max(set2.size() - i2, zero);
}
int main() {
vector<vector<int> > frequent_sets;
vector<int> vector3;
vector3.push_back(1);vector3.push_back(2);vector3.push_back(3);
vector<int> vector2;
vector2.push_back(1);vector2.push_back(2);
frequent_sets.push_back(vector3);
frequent_sets.push_back(vector3);
frequent_sets.push_back(vector2);
frequent_sets.push_back(vector3);
for(vector<vector<int> >::iterator itouter = frequent_sets.begin(); itouter != frequent_sets.end(); ++itouter)
for(vector<vector<int> >::iterator itinner = (itouter + 1); itinner != frequent_sets.end(); ++itinner)
if(distance(*itinner, *itouter) == 0) {
cout << "Hey" << endl;
}
}
当我尝试编译时,我收到错误:
制作所有建筑文件: ../src/TestIterator.cpp调用:GCC C ++编译器g ++ -O0 -g3 -Wall -c -fmessage-length = 0 -MMD -MP -MF“src / TestIterator.d”-MT“src / TestIterator.d”-o“src / TestIterator.o”“../ src / TestIterator.cpp” /usr/include/c++/4.3/bits/stl_iterator_base_types.h:实例化 'std :: iterator_traits&gt; &GT;': ../src/TestIterator.cpp:50:
从这里实例化 /usr/include/c++/4.3/bits/stl_iterator_base_types.h:133: 错误:没有命名的类型 'class中的'iterator_category' 的std ::矢量'make:*** [src / TestIterator.o]错误1
这是为什么?当我用distance(*itouter, *itinner) == 0
替换itinner->size() == itouter->size()
时,代码正在编译并正常运行。
答案 0 :(得分:8)
youd distance
函数与std
中的函数发生冲突。这就是为什么通常不建议在代码中编写using namespace std;
。尝试删除该功能或将您的功能重命名为my_distance
。
答案 1 :(得分:0)
它正在尝试使用distance
中定义的namespace std
算法。如果您希望调用距离函数,请使用::distance