我可以对带有变量的向量使用 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 列表初始化器语法吗?的主要内容,如果未能解决你的问题,请参考以下文章