我可以对带有变量的向量使用 C++11 列表初始化器语法吗?

Posted

技术标签:

【中文标题】我可以对带有变量的向量使用 C++11 列表初始化器语法吗?【英文标题】:Can I use C++11 list-initializer syntax for vectors with variables? 【发布时间】:2015-06-09 14:30:24 【问题描述】:

我有一些双变量:a、b、c... 我想构造一个向量 v 例如 v[0]=a, v[1]=b 等 我可以用 C++11 列表初始化器来做到这一点吗?即这种语法:

std::vector<double> va,b,c;

如果没有,有没有办法直接做到这一点,而不需要多次 pushback() ?

【问题讨论】:

@mdrlol 它会起作用的。没问题。 你的意思是从v[0]=a开始吗? @Ninetainedo 我没有,因为我记得(可能不正确)它只适用于常量 在 SO 上发帖之前要做的第一件事就是尝试一下。 @Bastien:没错,但这只是将问题变成“这是合法的 C++11 还是编译器扩展?”。 【参考方案1】:

您可以使用此在线 C++ 编译器轻松回答此类问题:http://webcompiler.cloudapp.net/

我试过了,效果很好:

#include <vector>
int main()

    double a, b, c;
    std::vector<double> va,b,c;

【讨论】:

【参考方案2】:

对@Chris Guzak 帖子的模仿:)

我试过了,效果很好:

#include <iostream>
#include <functional>
#include <vector>


int main() 

    double a = 1.1, b = 2.2, c = 3.3;

    std::vector<double> v  std::cref( a ), std::cref( b ), std::cref( c ) ;

    for ( double x : v ) std::cout << x << ' ';
    std::cout << std::endl;

再来一个模仿。

哇!我试过了,它奏效了:

#include <iostream>
#include <vector>

int main() 

    double a = 1.1, b = 2.2, c = 3.3;

    std::vector<double> v;
    v.reserve( 3 );

    for ( auto x :  a, b, c  ) v.push_back( x );

    for ( double x : v ) std::cout << x << ' ';
    std::cout << std::endl;

还有一个

我试过了,效果很好:

#include <iostream>
#include <vector>

int main() 

    double a = 1.1, b = 2.2, c = 3.3;

    std::vector<double> v;

    v.insert( v.end(),  a, b, c  );

    for ( double x : v ) std::cout << x << ' ';
    std::cout << std::endl;

哦,我试过了,它也奏效了:

#include <iostream>
#include <vector>

int main() 

    double a = 1.1, b = 2.2, c = 3.3;

    std::vector<double> v;

    v.assign(  a, b, c  );

    for ( double x : v ) std::cout << x << ' ';
    std::cout << std::endl;

还有什么我没有尝试过的?:)

【讨论】:

以上是关于我可以对带有变量的向量使用 C++11 列表初始化器语法吗?的主要内容,如果未能解决你的问题,请参考以下文章

返回类型向量

带有智能指针的 C++11 向量

R:带有列表的交叉引用向量,HELP:基于正命中附加新向量

C++11新特性之列表初始化

尝试访问二维向量元素时出现段错误

列表初始化使用啥构造函数