Yi's Blog

思绪来得快,去得也快

C/C++ 各种类型的快速初始化

数组的初始化

普通的数组可以使用大括号来初始化,且这个大括号是可以嵌套使用的:

int a[1][1][1] = { { {0} } };

C++ 11中,std::vector 也可以使用括号来初始化,

vector<vector<int> > v = { {1, 2, 3, 4}, {1, 2, 3, 4, 4} };

不支持 C++11 的环境中,可以使用如下的方法初始化一位数组(c++ - How to initialize an STL vector with hardcoded elements in the easiest way? - Stack Overflow):

static const int arr[] = {16,2,77,29};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );

vector 在初始化时,还可以使用 reserve 和 resize 两个函数为 vector 预留空间,两者的区别可以参见 ping不見路: STL vector 效率小記

字典的初始化

C++11 中可以直接使用大括号进行初始化:

map<int,int> _map = {
    {1, 2},
    {3, 4},
    {5, 6}
};

在不支持 C++11 的环境下,只能自己写一个函数来创建了:

#include <map>

using namespace std;

map<int,int> create_map()
{
  map<int,int> m;
  m[1] = 2;
  m[3] = 4;
  m[5] = 6;
  return m;
}

map<int,int> m = create_map();

当字典的 value 是一个结构体时,可以直接使用 [] 对结构体中的一个变量进行赋值,达到生成一个结构体,并赋值的目的。

#include <iostream>
#include <unordered_map>
#include <unordered_set>

using namespace std;

//This structure takes care of data forwarding
struct pit_entry {
    int interfaces;
    unordered_set<int> nonces;
    int time; //<aa> last time this entry has been updated</aa>
};


int main(int argc, char *argv[]) {
    unordered_map <int, pit_entry > PIT;
    PIT[1].time = 1;
    cout<<PIT[1].time;
}

其他

- EOF -