在日常的C++编码中,我们经常需要创建并初始化一个容器,因此掌握简单快捷的容器初始化或赋值的方法就显得尤为重要。本章内容是从C++标准库和C++Primer摘录比较常用的初始化和赋值方法:

1.采用初值列进行初始化,因为array在定义使要指明其大小,故该操作不是适用array;

const std::vector<int> v1 = {1,2,3,4};	   //正确
const std::array<int, 10> arr = {1,2,3,4}; //前4位被初始化,后6位为0
2.以 另一个元素的初值,完成初始化操作
std::list<std::string> li;		//初始化一个list string 
...
//采用拷贝构造
std::vector<float> c(l.begin(), l.end()); //容器不同,类型向上兼容
 
//采用移动构造
std::vector<int> c(std::make_move_iterator(l.begin()),
				   std::make_move_iterator(l.end()));
3.以某个 寻常的内置C数组完成初始化操作
int arr[] = {22,3,4,5,6};

//采用旧方法进行
std::set<int> s(arr, arr + sizeof(arr)/sizeof(arr[0));

//采用新方法std::begin()和std::end()
std::set<int> s(std::begin(), std::end());
4.以标准输入设备完成初始化动作
std::deque<int> c((std::istream_iterator<int>(std::cin)),
				  (std::istream_iterator<int)()));
5.可以 使用移动构造函数去初始化,初始化后,vi就不能被使用了
std::vector<int> v1;

//move contents of v1 into v2
std::vector<int> v2 = std::move(vi);
6.对于顺序容器(不包括array)的构造函数可以 接受大小参数
string s(10, '9');		//初始化为10个9的字符串

//对于赋值来说,需要记住顺序容器可通过assign赋值,其可也可接受大小参数
容器赋值,我们可以通过unique_copy, copy进行赋值,就可以通过assign
//采用copy算法
vector<int> vec = {1,1,2,2,3,3};
list<int> li;
unique_copy(vec.begin(), vec.end(), back_inserter(li)); //进行赋值

//采用自带的assign方法
li.assign(10, 1);  //li中含有10个1






Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐