C++ 数组值作为条件

C++ 数组值作为条件,c++,arrays,visual-studio,if-statement,C++,Arrays,Visual Studio,If Statement,我有一个名为test的整数数组,包含7个元素,我想写一个if语句来检查数组的前6个值是否等于某个值集合,我尝试的是: if (test == {1, 0, 1, 0, 0, 0} ) { //statement(s) } 但是,包含条件的行给了我一个“预期表达式错误”,我做错了什么? 提前感谢。如果您使用std::array您只需依靠操作符== std::array<int, 7> a1 = {1, 2, 3, 4, 5, 6, 7}; std::array<int,

我有一个名为
test
的整数数组,包含7个元素,我想写一个if语句来检查数组的前6个值是否等于某个值集合,我尝试的是:

if (test == {1, 0, 1, 0, 0, 0} ) {
//statement(s)
}
但是,包含条件的行给了我一个“预期表达式错误”,我做错了什么?
提前感谢。

如果您使用
std::array
您只需依靠
操作符==

  std::array<int, 7> a1 = {1, 2, 3, 4, 5, 6, 7};
  std::array<int, 7> a2 = {2, 3, 4, 5, 6, 7, 8};
  std::cout << "a1 == a1 " << (a1 == a1) << std::endl;
  std::cout << "a1 == a2 " << (a1 == a2) << std::endl;

请注意,您需要将
std::memcmpy
结果与0进行比较,这意味着它们相等。但是,在这种方法中,您应该首先检查维度是否相等。

如果使用
std::array
,您只需依赖
操作符==

  std::array<int, 7> a1 = {1, 2, 3, 4, 5, 6, 7};
  std::array<int, 7> a2 = {2, 3, 4, 5, 6, 7, 8};
  std::cout << "a1 == a1 " << (a1 == a1) << std::endl;
  std::cout << "a1 == a2 " << (a1 == a2) << std::endl;
请注意,您需要将
std::memcmpy
结果与0进行比较,这意味着它们相等。但是,在这种方法中,您应该首先检查尺寸是否相等。

这里有一种方法(如果您的
测试是
std::array
):

#包括
...
向量v({1,0,1,0,0,0});
如果((v.size()==test.size())&&std::equal(test.begin(),test.end(),v.begin())){
//声明(s)
}

#包括
...
向量v({1,0,1,0,0,0});
if(std::equal(test.begin()、test.end()、v.begin()、v.end()){
//声明(s)
}
这里有一种方法(如果您的
测试是
std::array
):

#包括
...
向量v({1,0,1,0,0,0});
如果((v.size()==test.size())&&std::equal(test.begin(),test.end(),v.begin())){
//声明(s)
}

#包括
...
向量v({1,0,1,0,0,0});
if(std::equal(test.begin()、test.end()、v.begin()、v.end()){
//声明(s)
}

C++17版本使用扣除指南:

std::array

std::array test{1, 0, 1, 0, 0, 0};

if(test == std::array{1, 0, 1, 0, 0, 0}) {
    std::cout << "equal\n";
}

使用演绎指南的C++17版本:

std::array

std::array test{1, 0, 1, 0, 0, 0};

if(test == std::array{1, 0, 1, 0, 0, 0}) {
    std::cout << "equal\n";
}


你可能想要。如果你做
test
a
std::vector
你可以做
如果(test==std::vector{1,0,1,0,0}){}
@tedlynmo包含条件的行给我一个“类模板的参数列表”std::array“丢失”错误,任何想法?你可能想要。如果你做
test
a
std::vector
你可以做
If(test==std::vector{1,0,1,0,0,0}){}
@tedlynmo包含条件的行给我一个“类模板的参数列表”std::array“丢失”错误,有什么想法吗?
std::equal
的第三个参数也是迭代器。你是说std::vector({1,0,1,0,0,0})。begin()
?此外,此方法可能会给出不正确的结果,或者未定义的行为是
test。size()
不等于初始值设定项列表中的元素数。@pptaszni已修复。谢谢。
std::equal
的第三个参数也是迭代器。你是说std::vector({1,0,1,0,0,0})。begin()
?此外,此方法可能会给出不正确的结果,或者未定义的行为是
test。size()
不等于初始值设定项列表中的元素数。@pptaszni已修复。谢谢。包含条件的两行分别给出了“类模板的参数列表”std::array“缺失”和“类模板的参数列表”std::vector“缺失”错误,即使矢量和数组头都包含在内。@TheRiser它只在C++17及更高版本中工作,因此您需要在Visual Studio中选择C++17标准,否则它将使用C++14。演示:我很抱歉回复得太晚,但我无法像您在切换到C++17之后那样声明数组和向量,因为我总是以“无构造函数实例”…“匹配参数列表”错误告终,编译器唯一接受的是以下行:
std::vector test{0,0,0,0,0},即使在包含该条件的行中,仍然会出现“无构造函数实例”std::vector“匹配参数列表”错误。@您必须使用旧版本的Visual Studio,但C++17支持较差。在VS2019中,这绝对没有问题。我使用的是VS2017,所以这一定是问题所在,但是,既然我知道这个解决方案有效,我会找到一种方法使其有效,谢谢!包含条件的两行分别给出了“类模板的参数列表”std::array“丢失”和“类模板的参数列表”std::vector“丢失”错误,即使向量和数组头都包含在内。@因此,它仅适用于C++17及更高版本,因此您需要在Visual Studio中选择C++17标准,否则它将使用C++14。演示:我很抱歉回复得太晚,但我无法像您在切换到C++17之后那样声明数组和向量,因为我总是以“无构造函数实例”…“匹配参数列表”错误告终,编译器唯一接受的是以下行:
std::vector test{0,0,0,0,0},即使在包含该条件的行中,仍然会出现“无构造函数实例”std::vector“匹配参数列表”错误。@您必须使用旧版本的Visual Studio,但C++17支持较差。在VS2019中,这绝对没有问题。我使用的是VS2017,所以这一定是问题所在,但是,既然我知道这个解决方案有效,我会找到一种方法使其有效,谢谢!
std::array test{1, 0, 1, 0, 0, 0};

if(test == std::array{1, 0, 1, 0, 0, 0}) {
    std::cout << "equal\n";
}
std::vector test{1, 0, 1, 0, 0, 0};

if(test == std::vector{1, 0, 1, 0, 0, 0}) {
    std::cout << "equal\n";
}