(1)简单的问题:如何创建一个含有5个int元素的vector,并且里面存储的值是不同的?
在C++11之前,要实现上述的功能,必须先构造一个含有5个元素的vector,然后修改vector的值
std::vector<int> v(5, 0);
v[0] = 1;
v[1] = 3;
v[2] = 3;
v[3] = 2;
v[4] = 10;
当有了列表初始化之后,我们可以这么写
std::vector<int> v{1, 3, 3, 2, 10};
这样是的初始化的工作简便了很多。
(2)语法
列表初始化分为两类:直接列表初始化和拷贝列表初始化
- 直接列表初始化:
T object { arg1, arg2, ... }; (1)
T { arg1, arg2, ... } (2)
new T { arg1, arg2, ... } (3)
Class { T member { arg1, arg2, ... }; }; (4)
Class::Class() : member{arg1, arg2, ...} {... (5)
代码示例:
#include <iostream>
#include <vector>
class Example1
{
std::vector<int> v2{1, 2, 3, 4, 5}; //(4)
std::vector<int> v3;
public:
Example1():v3{1, 2, 3, 4, 5}{} //(5)
void print()
{
for(auto i : v2)
std::cout<<i<<" ";
std::cout<<"\n";
}
};
int main()
{
std::vector<int> v1{1, 2, 3, 4, 5}; //(1)
std::vector<int>{1, 2, 3, 4, 5}; //(2) 这里是一个匿名对象
auto pV4 = new std::vector<int>{1, 2, 3, 4, 5}; //(3) new 表达式
return 0;
}
- 拷贝列表初始化
T object = {arg1, arg2, ...}; (6)
function( { arg1, arg2, ... } ) (7)
return { arg1, arg2, ... } ; (8)
object[ { arg1, arg2, ... } ] (9)
object = { arg1, arg2, ... } (10)
U( { arg1, arg2, ... } ) (11)
Class { T member = { arg1, arg2, ... }; }; (12)
代码示例:
#include <iostream>
#include <vector>
class Example1
{
std::vector<int> v2 = {1, 2, 3, 4, 5}; //(12)
std::vector<int> v3;
public:
Example1():v3{1, 2, 3, 4, 5}{}
void print()
{
for(auto i : v2)
std::cout<<i<<" ";
std::cout<<"\n";
}
};
void func(const vector<int>& v)
{
for(auto i : v)
std::cout<<i<<" ";
std::cout<<"\n";
}
std::vector<int> func2()
{
return {1, 2, 3, 4, 5}; //(8)
}
int main()
{
std::vector<int> v1 = {1, 2, 3, 4, 5}; //(6)
func({1, 2, 3, 4, 5}); //(7)
std::vector<int> v2;
v2 = func2();
return 0; //(10)
}
note: (9) 和(12)暂时没有想到很恰当的例子。
PS: 在C++11之前,我们可以使用{ }
对 struct
和数组做一些初始化的工作
struct example2
{
int c;
int d;
};
struct example
{
int a;
double c;
example2 e;
};
int main()
{
int a[] = {1, 2, 3, 4, 5};
example e={1, 0.0, {0, 0}};
return 0;
}
网友评论