CPP中{}和[]的用法与区分

在 C++ 中,{}[]在不同的上下文中有着不同的含义和用法。

  1. {}这在 C++ 中被称为初始化列表。可以使用它们来初始化对象、数组、向量等。例如:
int arr[] = {1, 2, 3, 4, 5}; // 初始化一个整数数组
std::vector<int> vec = {1, 2, 3, 4, 5}; // 初始化一个向量

示例:一维向量加入二维数组

//在n以内找质数对
for(int i=2;i<=n/2;i++){
  if(isPrime[i]==1&&isPrime[n-i]==1){
    //当我们试图创建一个一维向量加入二维数组,必须要用{}而不是[]
    result.push_back({i,n-i});//把质数对加入结果
  }
}

此时result.push_back({i, n-i});表示将一个由in-i组成的向量添加到结果向量result中。

添加后的输出:

输出:result = [[3,7],[5,5]]//这里就是加入的质数对,我们只是书写的时候用[]来表示,实际上[3,7]是一维向量{}的形式。
  1. []:这主要用于数组的索引lambda 函数的捕获列表和在一些特殊语法中(例如:std::array<int, 3> arr = {1, 2, 3};)。

例如,可以通过索引访问数组的元素:int x = arr[0];,这里的[0]就是数组的索引。

对于 lambda 函数,可以通过捕获列表捕获作用域内的变量以供 lambda 函数使用,例如:

cppCopy codeint x = 10;
auto func = [x]() { return x + 5; }; 

在这个例子中,[x]就是捕获列表,表示捕获作用域内的变量x

向量输出情况的误区

我们很多时候会看到,二维数组的输出样例:

输入:n = 10
输出:[[3,7],[5,5]]
解释:在这个例子中,存在满足条件的两个质数对。 
这两个质数对分别是 [3,7][5,5],按照题面描述中的方式排序后返回。

试图使用[]来创建一个向量,在 C++ 中这是错误的,应该使用{}

在C++中,我们使用{}来创建和初始化向量。当我们看到输出结果[[3,7],[5,5]]时,实际上这是一个包含两个向量的向量,它的类型是vector<vector<int>>

在这种类型的对象中,[3,7][5,5]分别是两个vector<int>,即一维向量。在C++中,向量创建的时候,我们需要使用{3,7}{5,5}来创建和初始化这些一维向量,而不是[3,7]和[5,5]。

正确示例:

result.push_back({i, n-i})

实际上这是将一个一维向量{i, n-i}(在本例中,它们是{3,7}{5,5})添加到了result向量中。最终,result就成了一个包含一维向量的二维向量。

可以理解为,[]在输出结果中的使用是为了表示向量的层次结构,它并不直接对应到C++的语法。在C++的代码中,我们只使用{}来创建和初始化向量

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值