首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现数组初始化器

实现数组初始化器
EN

Stack Overflow用户
提问于 2011-03-23 01:45:39
回答 2查看 551关注 0票数 5

您可以在同一行中声明和初始化常规数组,如下所示:

代码语言:javascript
复制
int PowersOfTwo[] = {1, 2, 4, 8, 16, 32, 64, 128};

有没有办法在自定义类中复制这种行为?所以,举个例子:

代码语言:javascript
复制
MyClass<int> PowersOfTwo = {1, 2, 4, 8, 16, 32, 64, 128};

你可以让一个拷贝构造函数接受一个数组作为它的参数,但是你仍然需要在前一行声明数组。

代码语言:javascript
复制
int InitializationArray[] = {1, 2, 4, 8, 16, 32, 64, 128};
MyClass<int> PowersOfTwo = InitializationArray; 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-23 01:55:03

你可以用这样的方式实现你的类,你可以这样写:

代码语言:javascript
复制
MyClass<int> array;
array = 1,2,3,4,5,6,7,8,9,10;//dont worry - all ints goes to the array!!!

下面是我的实现:

代码语言:javascript
复制
template <class T>
class MyClass
{
   std::vector<T> items;
public:

    MyClass & operator=(const T &item)
    {
       items.clear();
       items.push_back(item);
       return *this;
    }
    MyClass & operator,(const T &item)
    {
       items.push_back(item);
       return *this;
    }
    size_t Size() const { return items.size(); }
    T & operator[](size_t i) { return items[i]; }
    const T & operator[](size_t i) const { return items[i]; }

};

int main() {

        MyClass<int> array;
        array = 1,2,3,4,5,6,7,8,9,10;
        for (size_t i = 0 ; i < array.Size() ; i++ )
           std::cout << array[i] << std::endl;
        return 0;
}

输出:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
10

查看在线演示:http://www.ideone.com/CBPmj

你可以在这里看到我昨天发布的两个类似的解决方案:

Template array initialization with a list of values

编辑:

您可以使用类似的技巧来填充现有STL容器。例如,您可以这样写:

代码语言:javascript
复制
std::vector<int> v;
v+=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; //push_back is called for each int!

重载(),运算符所需的全部内容如下:

代码语言:javascript
复制
template<typename T>
std::vector<T>& operator+=(std::vector<T> & v, const T & item)
{
    v.push_back(item); return v;
}
template<typename T>
std::vector<T>& operator,(std::vector<T> & v, const T & item) 
{
    v.push_back(item); return v;
}

工作演示:http://ideone.com/0cIUD

再次编辑:

我是having fun with C++ operator。现在是这样:

代码语言:javascript
复制
std::vector<int> v;
v << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; //inserts all to the vector!

我觉得这样看起来好多了!

票数 6
EN

Stack Overflow用户

发布于 2011-03-23 01:49:30

只有当您的编译器支持C++0x特性initializer lists时,才能做到这一点。

否则,必须使用其他一些语法,就像在boost.assign库中一样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5395595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档