文章目录
在 C++ 中,{}
和[]
在不同的上下文中有着不同的含义和用法。
{}
:这在 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});
表示将一个由i
和n-i
组成的向量添加到结果向量result
中。
添加后的输出:
输出:result = [[3,7],[5,5]]//这里就是加入的质数对,我们只是书写的时候用[]来表示,实际上[3,7]是一维向量{}的形式。
[]
:这主要用于数组的索引、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++的代码中,我们只使用{}
来创建和初始化向量。