将 std::array 推回到 std::vector N 次的优雅方式
Elegant way to push back std::array to std::vector N times
以下代码将 std::array 推回 std::vector N 次。有没有更优雅和更短的方式来做到这一点?
#include <iostream>
#include <vector>
#include <array>
#include <iomanip>
#include <complex>
#include <cmath>
int main () {
int N=10;
std::vector< std::array<std::complex<double>,3> > v;
v.reserve(N);
for(int i=0;i<N;i++){
std::array<std::complex<double>,3> el { {0.0,3.0,0.0} };
v.push_back(el);
}
}
您可以使用std::vector::insert
(重载集中的#3)成员函数:
int N=10;
std::vector< std::array<std::complex<double>,3> > v;
v.reserve(N);
v.insert(v.end(), N, { {0.0,3.0,0.0} });
请注意,@MarekR 的答案更适合初始化向量,因为它绕过了对 reserve
的调用,并且在初始化期间设置对象通常比随后的成员函数调用更好。上面对 std::vector::insert
的调用适用于稍后添加其他元素。
是的,但是在构建向量时必须使用括号
std::vector< std::array<std::complex<double>,3> > v(n, {0.0,3.0,0.0});
如果使用大括号而不是初始化列表,那么在这种情况下您可能会遇到意外错误。
以下代码将 std::array 推回 std::vector N 次。有没有更优雅和更短的方式来做到这一点?
#include <iostream>
#include <vector>
#include <array>
#include <iomanip>
#include <complex>
#include <cmath>
int main () {
int N=10;
std::vector< std::array<std::complex<double>,3> > v;
v.reserve(N);
for(int i=0;i<N;i++){
std::array<std::complex<double>,3> el { {0.0,3.0,0.0} };
v.push_back(el);
}
}
您可以使用std::vector::insert
(重载集中的#3)成员函数:
int N=10;
std::vector< std::array<std::complex<double>,3> > v;
v.reserve(N);
v.insert(v.end(), N, { {0.0,3.0,0.0} });
请注意,@MarekR 的答案更适合初始化向量,因为它绕过了对 reserve
的调用,并且在初始化期间设置对象通常比随后的成员函数调用更好。上面对 std::vector::insert
的调用适用于稍后添加其他元素。
是的,但是在构建向量时必须使用括号
std::vector< std::array<std::complex<double>,3> > v(n, {0.0,3.0,0.0});
如果使用大括号而不是初始化列表,那么在这种情况下您可能会遇到意外错误。