新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
初始化列表
广安网站建设公司创新互联建站,广安网站设计制作,有大型网站制作公司丰富经验。已为广安超过千家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的广安做网站的公司定做!int arr[5] = {0};
int arr[] = {1, 2, 3, 4} ;
但一些自定义类型(包括标准库中形如vector这样的容器)是不被允许的,在C++11中增加了该功能,这种初始化的方法被称为“初始化列表”
#include#include
从C++11开始,以下几种形式的初始化得到允许:
//“=”加上赋值表达式
int a = 3+4;
//"=" 加上花括号初始化列表
int a = {3+4};
//圆括号的表达式列表
int a(3+4);
//花括号的初始化列表
int a{3+4}
方法:include
#include#includeusing namespace std;
enum Gender {boy, girl};
class People
{
public:
//使people类可以通过初始化列表的方式来初始化私有成员data
//看起来就像是可以放任意数量的pair作为构造函数的参数
People(initializer_list>l)
{
// initializer_list的构造函数
auto i = l.begin();
for (;i != l.end(); ++i)
data.push_back(*i);
}
private:
vector>data;
};
People ship2012 = {{"Garfield", boy}, {"HelloKitty", girl}};
// 编译选项:g++ -c -std=c++11 3-5-2.cpp
#include#includeusing namespace std;
class Mydata
{
public:
Mydata & operator [] (initializer_listl)
{
//重载[],将初始化列表的数据写到idex数组中
for (auto i = l.begin(); i != l.end(); ++i)
idx.push_back(*i);
//因为Mydata重载了"[]"后,还需要与"="进行重载,故需要return *this
return *this;
}
Mydata & operator = (int v)
{
if (idx.empty() != true)
{
//下标指中的位置,
for (auto i = idx.begin(); i != idx.end(); ++i)
{
//动态扩容存放数据的d数组,预防index超出d的容量
d.resize((*i >d.size()) ? *i : d.size());
//在idx所有存放的下标中,作为d的下标,将d中下标为Idx的位置的值改为v
d[*i -1] = v;
}
//本次赋值结束,清空下标
idx.clear();
}
return *this;
}
void Print()
{
for (auto i = d.begin(); i != d.end(); ++i)
cout<< *i<< " "; cout<< endl;
}
private:
vectoridx; // 辅助数组,用于记录index
vectord;
};
int main()
{
Mydata d;
d[{2, 3, 5}] = 7;
d[{1, 4, 5, 8}] = 4;
d.Print(); // 4 7 7 4 4 0 0 4
}
// 编译选项:g++ -std=c++11 3-5-4.cpp
//将构造临时变量vector{1,3}并返回
vectorFunc() { return {1, 3}; }
//采用const & 作为返回修饰符时,获得的是临时变量的引用,效果与返回一个字面值常量(如return "hello world";)相同
const vector& Func1() { return {3, 5};}
使用列表初始化还有一个大优势是可以防止类型收窄
//todo
2022/12/2 0:30
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧