2017-05-08 50 views
-2

我明白,如果我想以发起与相同值的向量,我可以简单地做如下如何在C++ 11中启动具有相同值的向量向量?

vector<double> bcd= vector<double>(10,88); 

这将产生具有10个元素的向量,其中每一个是等于88

但是我怎样才能启动一个向量,所有元素都等于88?如

vector< vector<double> > abc = vector< vector<double> >(???, ???); 

非常感谢!

回答

1
std::vector< std::vector<double> > abc(10, std::vector<double>(10,88)); 

这浪费了一个std::vector<double>(10,88)我相信。这些副本可能不如88直接初始化双打效率。

template<class T, class...Args> 
std::vector<T> generate_vector(std::size_t count, Args&&...args) { 
    std::vector<T> r; 
    r.reserve(count); 
    for (std::size_t i = 1; i < count; ++i) 
    r.emplace_back(args...); 
    if (count) 
    r.emplace_back(std::forward<Args>(args)...); 
    return r; 
} 

然后

auto abc = generate_vector<std::vector<double>>(10, 10, 88); 

做它没有任何浪费。