我有一个方法,我希望以不同的方式执行,具体取决于传递的变量是否是向量的元素,例如:
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
最简单的方法是什么?
答案 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)
int
是int
。 int
没有在脖子上贴上标签,告诉每个人它来自哪里。将int
传递给函数时,没有任何内容可以指定int
的来源。
您应该以此为契机来了解迭代器,并实现一个带有
的重载方法void method(int);
表示参数,或
void method(std::vector<int>::iterator iter);
表示参数(或者,可能是const_iterator
),并通过将迭代器传递给向量中的method()
来调用备用int
。