c ++:如何确定变量是否是向量元素

时间:2016-12-13 13:26:57

标签: c++ vector methods

我有一个方法,我希望以不同的方式执行,具体取决于传递的变量是否是向量的元素,例如:

void method(int a){
if (/*a is an element of a vector*/) //do one thing
else //do another thing
}

然后在main:

vector<int> a;
a.pushback(1);
int b = 1;
method(a[0]); // does one thing
method(b); // does the other thing

最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

嗯,对于所有情况,这是不可能的,因为它实际上需要你的函数来查看它是如何执行的,而且在C ++中没有这样的东西。想到了讨厌的eval()。

但在某种情况下,当您的向量是全局实体时,您可以通过链接而不是值传递变量。然后,您可以检查它是否适合所需向量的开始和结束之间的空间。这是如何完成的(虽然没有经过测试,但应该有效)

vector<int> v;
//fill it somewhere somehow


void method(int& a)
{
    int* beg = v.data();
    int* end = beg + v.size();
    int* val = &a;
    if ((val >= beg) && (val < end))
    {
        //it is a part of vector
    }
    else
    {
        //it is not a part of vector
    {
}

问题是你真的不应该这样做......正如评论中的人所说,它看起来像是一个XY问题。

答案 1 :(得分:-1)

intintint没有在脖子上贴上标签,告诉每个人它来自哪里。将int传递给函数时,没有任何内容可以指定int的来源。

您应该以此为契机来了解迭代器,并实现一个带有

的重载方法
void method(int);

表示参数,或

void method(std::vector<int>::iterator iter);

表示参数(或者,可能是const_iterator),并通过将迭代器传递给向量中的method()来调用备用int