是否可以使用 C++03 在一行中构造容器并将数据填充到其中?

Is it is possible to construct container and filled data into it in one line using C++03?

假设我有一个Container

template<typename Type>
class Container
{
public:
    Container(int size_)
    {
        size=size_;
        data = new Type[size];
    }
    ~Container()
    {
        delete [] data;
    }

private:
    int size;
    Type* data;
};

我想使用 C++03 像这样在一行中构建容器并向其中填充数据

// very easy to implement using C++11 std::initializer_list
Container<int> container{100,200,300}

Container<int> container(100,200,300)

// other one line solution

执行此操作后,data[0]=100,data[1]=200,data[2]=300

感谢您的宝贵时间。

附录

类似的问题是

Evg 已经给出答案可以实现两行解决方案。

Container<int> container(3);
container << 100, 200, 300;

我仍然想知道是否存在一线解决方案?

你的答案link差不多就可以了。您只需要稍作修改,那就是:您需要使您的容器可调整大小。这实际上是主要问题。一旦有了它,调整解决方案就很容易了。编写一个 insert 方法来重新分配内存并调整大小,然后只需要对建议的解决方案进行微小的修改。

有一个注意事项,即您不能在构造对象上调用构造函数调用方法,并且在没有副本的情况下将其分配给同一行中的变量。为此,可以提供从 ProxyContainer 的转换。我会重新考虑将某些东西放在一条线上是否真的值得这个成本,而在两条线上可以更容易地完成。

我没有包括 insert 的实现,因为那将是一个不同的问题:

#include <iostream>

template<typename Type>
class Container {
private:
    struct Proxy {
        Container* container;
        Proxy(Container* container) : container(container) {}

        Proxy& operator,(Type value) {
            container->insert(value);
            return *this;
        }
        operator Container() { return *container; }
    };

public:
    // ...
    void insert(const Type& value) {
        std::cout << value;
    }

    Proxy operator<<(Type value) {        
        insert(value);
        return Proxy(this);
    }
};

int main() {
    Container<int> container = (Container<int>() << 1,2,3);
}

输出:

123

PS:

The problem is that, there is Container x={1,2,3,....,1000} everywhere in my project using C++11. Now, I must omove to C++03, and there is no std::itializer_list

是的,这是个问题。我想 1,2,3,...1000 只是一个过于简单的例子,否则你可以使用类似于 std::iota 的东西来填充容器(也只在 C++11 之后可用,但实现起来并不难)。如果那是实际问题,并且您正在寻找临时 hack,我宁愿使用普通数组并从中构建容器:

int temp[] = {1,2,3,4,5 ....};
Container<int> x( &temp[0], &temp[999]);