在Python中,可以很容易地判断arr1是否与arr2相同,例如:
[1,2,3] == [1,2,3]
{1,2,3} == {3,1,2}
(1,2,3) == (1,2,3)
在C++中如何做到这一点?
//#include <bits/stdc++.h>
using namespace std;
int main()
{
// if ({1, 2}== {1, 2})
// cout<<" {1, 2}== {1, 2}";
if ((1, 2)== (2, 2))
cout<<" (1, 2)== (1, 2) equal";
}
if ({1, 2}== {1, 2}) cout<<" {1, 2}== {1, 2}";
抛出错误error: expected primary-expression before ‘{’ token
,然而,if ((1, 2)== (2, 2)) cout<<" (1, 2)== (1, 2) equal";
给出了意外的结果,它认为(1,2)和(2,2)是相同的。
我是否必须将列表转换为向量,在C++中进行比较,如下图所示?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
if (vector<int>({1, 2})== vector<int>({1, 2}))
cout<<" vector<int>({1, 2})== vector<int>({1, 2}";
}
C++中的(1,2)
和{1,2}
的数据类型是什么?
3条答案
按热度按时间vh0rcniy1#
C中的(1,2)和{1,2}的数据类型是什么?
(1,2)
是uses the comma operator的表达式。这个表达式的类型是int
。{1,2}
本书是对C阴暗部分的一次冒险。这个构造本身在语法上是一个braced initialization list,它本身不是任何形式的类型。每当人们想要使用转发引用的服务时,这总是会产生一堆悲伤的面孔,因为花括号初始化列表不是正式的类型,并且不能被压缩到转发引用中。但并非所有的希望都破灭了。当在这里显示的上下文中使用时,在太多时间过去之前,这个构造很快就变成了
std::initializer_list
,这是一个非常真实的类型。然后,在所示的代码中,它被传递给std::vector
的重载构造函数,该构造函数接受std::initializer_list
作为其参数。xpcnnkqh2#
在Python中,可以很容易地判断arr 1是否与arr 2相同,例如:
在Python中,方括号足以表示一个列表。在C++中,这是一种静态类型语言,你不能这样做。你必须使用它们的类型来声明数组:
正如在其他答案中所解释的,
{1, 2, 3}
本身是一个花括号初始化列表,而不是一个数组。在C++中,数组没有值语义。你不能像使用==比较两个整数那样比较它们。相反,您必须使用标准库中的函数(如std::equal
)来比较两者:其在内部逐个比较两个向量中的每个元素。当然,这比Python更冗长,但Python在做同样的事情。
或者,您可以使用STL容器,如std::vector和
std::array
,它们具有运算符==:std::vector
和std::array
之间的区别在于后者是固定大小的数组,而前者是可变的。对于套件:
{1,2,3} == {3,1,2}
元组:
(1,2,3)==(1,2,3)
你可以像这样使用==操作符:
但是你必须首先显式地创建集合和元组,这与Python不同,Python从括号中推断出你想要创建的内容。
Demo
7cjasjjr3#
C++中的(1,2)和{1,2}的数据类型是什么?*
{1,2}
是一个初始化列表,你不能在这样的比较中使用它,但你可以赋值,* 即 *:你可以使用迭代器访问数据,
init.begin()
会给予你一个指向第一个元素的 * 指针 *,你可以从那里继续,如果你指定一个类型,它会给你更多的功能,例如:这里有一个向量
int
,其中包含两个元素1
和2
。(1, 2) == (2, 2)
实际上什么都不是,逗号左边的元素将被丢弃,就好像你有2 == 2
一样。AFAICT,是的,必须涉及一个类型才能进行适当的比较。
如果你必须使用数组,并且你确定数组将具有相同数量的元素,你可以使用
is_permutation
来Assert数组是否具有相同的元素以不同的顺序:或者,您可以使用
std::sort
然后执行比较,前提是您使用STL容器,如std::vector
或std::array
,其==
运算符存在重载。如果你可以使用其他类型的集合,我的建议是使用
std::set
,它将比较true,无论插入的顺序是什么:您可以访问完整的容器库及其详细信息here,然后您可以选择更适合您需求的容器库。