本学期有C ++课程。上个学期我们正在学习Python,现在正在做一个我需要做出的赋值循环,循环而变量不等于数组中多个数字之一。 在python中,我会使用"而不是"功能,例如:
if a not in (1,2,3,4):
或类似的东西。 我天真的尝试在C ++中也是如此:
do {...}while(userin != (1,2,3,4);
但显然它不起作用。
有人知道如何在C ++中执行此操作吗?
答案 0 :(得分:3)
您可以使用算法标题中的标准库函数查找。例如:
int user = // this comes from your code...;
std::vector<int> exclude{1,2,3,4};
do {...} while (std::find(exclude.begin(), exclude.end(), user) == exclude.end());
当用户不在排除数组中时,这将循环。
但是你必须要小心你在循环中改变的内容和方式:用户和/或排除 - &gt;否则你很容易得到无限循环。您必须确保终止条件,可能需要一些额外的计数器等。
您还可以创建自己的模板化函数,以便在某个容器中搜索值,例如:
template<typename Container, typename T>
bool within(const Container& c, T value) {
return std::find(std::begin(c), std::end(c), value) != std::end(c);
}
然后你可以这样称呼它:
do {...} while !within(exclude, user);
其他例子:
std::vector<int> v{1,2,3};
std::cout << boolalpha
<< within(v, 1) << std::endl
<< within(v, 5) << std::endl;
std::string s = "Hello world";
std::cout << within(s, 'o') << std::endl
<< within(s, 'x') << std::endl;
答案 1 :(得分:1)
没有其他答案指出<algorithm>
中是标准函数的事实。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a = { 1,2,3,4,5 };
if (std::any_of(a.begin(), a.end(), [](int val){ return val == 3; })) // true
std::cout << "3 is in a" << std::endl;
if (std::any_of(a.begin(), a.end(), [](int val){ return val == 7; })) // false
std::cout << "7 is in a" << std::endl;
return 0;
}
答案 2 :(得分:0)
假设数组已排序,您可以使用bsearch
,否则您需要实现搜索逻辑,正如alrtold所说。
答案 3 :(得分:0)
在C ++中没有内置的支持,所以你必须自己实现它。这是一种方式。
#Persistent
SetTimer, DetectProcess, 50
return
DetectProcess:
If (ProcessExist("notepad.exe")) ; if the process is already running
ExitApp
; otherwise:
If (A_TimeIdlePhysical > 100) ; as long as there is no human input
{
If (ProcessExist("notepad.exe")) ; wait for either process start
ExitApp
}
else ; or human input
ExitApp
return
ProcessExist(ProcessName){
Process, Exist, %ProcessName%
return Errorlevel
}
您可以更改int bar;
std::vector<int> arr{1, 2, 3, 4};
do {
// Code
} while (std::find(arr.begin(), arr.end(), bar) == arr.end());
的{{1}}。缺点是你必须指定大小,但它比std::vector<int>
快。
答案 4 :(得分:0)