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

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

int a[1][1][1] = { { {0} } };
C++ 11中,std::vector 也可以使用括号来初始化,

vector<vector > 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 vec (arr, arr + sizeof(arr) / sizeof(arr[0]) );
vector 在初始化时,还可以使用 reserve 和 resize 两个函数为 vector 预留空间,两者的区别可以参见 ping不見路: STL vector 效率小記。

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
#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 是一个结构体时,可以直接使用 [] 对结构体中的一个变量进行赋值,达到生成一个结构体,并赋值的目的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
}