c++中vector的使用

Using of vector in C++

本文关键字:vector c++      更新时间:2023-10-16

我对下面的代码有问题,似乎不能找出什么是错误的

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
double distance(int a, int b)
{
    return fabs(a-b);
}
int main()
{
    vector<int> age;
    age.push_back(10);
    age.push_back(15);
    cout<<distance(age[0],age[1]);
    return 0;
}

错误在于调用函数距离。

/usr/include/c++/4.6/bits/stl_iterator_base_types.h: In instantiation of ‘std::iterator_traits<int>’:
test.cpp:18:30:   instantiated from here
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:166:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:167:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:168:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:169:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:170:53: error: ‘int’ is not a class, struct, or union type

您正在尝试覆盖std::distance函数,尝试删除" using namespace std "并使用std::限定coutendl

#include <iostream>
#include <cmath>
#include <vector>

double distance(int a, int b)
{
    return fabs(a-b);
}
int main()
{
    std::vector<int> age;
    age.push_back(10);
    age.push_back(15);
    std::cout<< distance(age[0],age[1]);
    return 0;
}

std::distance用于在指定范围内计算容器中的元素个数。你可以在这里找到更多信息。

或者您可以重命名您的距离函数,如果您想引入std::命名空间:

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
double mydistance(int a, int b)
{
    return fabs(a-b);
}
int main()
{
    vector<int> age;
    age.push_back(10);
    age.push_back(15);
    cout<<mydistance(age[0],age[1]);
    return 0;
}

这将使您的代码工作,但不建议在定义之前使用"using namespace"声明。在编写代码时,应该避免使用第二个选项,这里显示的只是作为代码示例的替代选项。

cout<< ::distance(age[0],age[1]);

(其他答案已经建议删除using指令)。

当你创建自己的函数distance时不要使用using namespace std,因为你对distance的调用正在寻找std::distance而不是你的distance函数。

你也可以这样做:

namespace foo
{
  double distance(int a, int b)
  {
    return fabs(a-b);
  }
}
int main()
{
   foo::distance(x,y); //now you're calling your own distance function.
}

或者,您可以使用

 using foo::distance; // OR:
 using namespace foo;
 (distance)(x,y); // the (parens) prevent ADL