#include
<iostream>
#include <vector>
using namespace std;
class MyData{
public:
MyData & operator[](initializer_list<int> l)
{
idx = l; //应该支持隐式共享,所以就直接赋值了,省的用move语义
int size = 0;
for(auto i = l.begin(); i != l.end(); ++i)
{
size = (size > *i) ? size : *i; // 以初始化列表中的最大值为容器大小
d.resize(size);
}
return *this;
}
// 单值赋值版本
// void operator=(int val)
// {
// if(idx.empty() != true)
// {
// for(auto i = idx.begin(); i != idx.end(); ++i)
// {
// d.resize((*i > d.size())? *i : d.size());
// d[*i - 1] = val;
// }
// idx.clear();
// }
// }
// 集合赋值版本
MyData & operator=(initializer_list<int> l)
{
if((idx.size() != 0) && (l.size() != 0))
{
auto val = l.begin();
for(auto i = idx.begin(); i != idx.end(); ++i)
{
if(val != l.end())
{
d[*i - 1] = *val++;
}
}
}
}
void Print()
{
for(auto i = d.begin(); i != d.end(); ++i)
cout << *i << " ";
cout << endl;
}
private:
initializer_list<int> idx; //保存数组下标
vector<int> d;
};
int main()
{
MyData d, k;
d[{2, 3, 5, 8}] = {7, 8, 9};
d.Print();
k[{1,4, 6}] = {};
k.Print();
return 0;
}