美文网首页
C++11:list initialization(列表初始化)

C++11:list initialization(列表初始化)

作者: fck_13 | 来源:发表于2020-01-11 16:20 被阅读0次

(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;
}

相关文章

  • C++11:list initialization(列表初始化)

    (1)简单的问题:如何创建一个含有5个int元素的vector,并且里面存储的值是不同的?在C++11之前,要实现...

  • Effective C++

    条款04 确定对象使用前已被初始化 尽量使用成员初始化列表(member initialization list)...

  • C++11——变量和基础类型

    列表初始化(List Initialization) 当初始化列表与内置类型的变量一起使用时,这种初始化形式具有一...

  • 动态分配内存

    动态分配内存初始化的方式 初始化列表(list initialization)对于数组、类、结构体都是试用的。

  • c++11强化知识点

    初始化列表(std::initializer_list) c++11提供了std::initializer_lis...

  • c++11新特性之列表初始化

    C++11新增了列表初始化的概念。 在C++11中可以直接在变量名后面加上初始化列表来进行对象的初始化。 列表初始...

  • 深度探索C++对象模型:成员变量的初始化列表

    对 class members 的初始化操作可以放在 member initialization list 或者 ...

  • vector> missin

    [C++11: Correct std::array initialization?] If I initiali...

  • 跳跃表

    Skip List定义 Skip List 完整实现 下面是跳表的基本操作 节点的创建 列表的初始化列表的初始化需...

  • 列表初始化

    c++11通过了列表初始化的方式。能通过列表初始化的方式去初始化一些自定义的类型。赋值可以采用如下形式:int a...

网友评论

      本文标题:C++11:list initialization(列表初始化)

      本文链接:https://www.haomeiwen.com/subject/vsxbactx.html