gpt4 book ai didi

c++ - 使用 find() 在 vector 中查找元素

转载 作者:行者123 更新时间:2023-11-30 01:30:21 25 4
gpt4 key购买 nike

我有一个存储一些整数的 vector 。在这个 vector 中,可以有除10、12、31之外的所有数字不能一起或成对出现,即10和12、10和31、12和31、10 12和31是无效的。我想出了以下方法:

int main(){ 
int a[] = {10,2,31}; //can be of any size
vector<int> v(a, a+3);
short cnt = 0;
if(find(v.begin(), v.end(), 10) != v.end())
++cnt;
if(find(v.begin(), v.end(), 12) != v.end())
++cnt;
if(find(v.begin(), v.end(), 31) != v.end())
++cnt;

if(cnt > 1)
cout<<"Invalid options";
else
cout<<"Valid options";

return EXIT_SUCCESS;
}

哪个有效。有一个更好的方法吗?特别是,由于 vector 可以包含任意数量的元素,是否有任何缺点?

最佳答案

如何计数:

template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count ( ForwardIterator first, ForwardIterator last, const T& value );

(参见 http://www.cplusplus.com/reference/algorithm/count/)

或者,count_if(只遍历列表一次):

template <class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type
count_if ( ForwardIterator first, ForwardIterator last, Predicate pred );

这需要谓词的一些额外工作,例如:

bool checkvalues(int i) {
return (i==10 || i==12 || i==31);
}

或者如果您想在运行时指定可能的值,您可以更聪明地使用 operator() 创建一个类。

(参见 http://www.cplusplus.com/reference/algorithm/count_if/)

关于无效对和三元组的问题是不是在转移注意力?

关于c++ - 使用 find() 在 vector 中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4582364/

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