我有一个this.CreateMap<A, C>()
.ForMember(dest => dest.cstr1, exp => exp.MapFrom(scc => scc.str1))
.ForMember(dest => dest.barr1, exp => exp.MapFrom(scc => scc))
.IgnoreAllNonExisting();
this.CreateMap<A, B[]>()
.ForMember(dest => dest[0].bstr1, exp => exp.MapFrom(scc => scc.str2))
.ForMember(dest => dest[0].bstr2, exp => exp.MapFrom(scc => scc.str3))
.IgnoreAllNonExisting();
我想填写一个函数。
我需要在我的程序中为稍后的某些计算存储一些3维坐标。
我的问题是如果我这样做:
std::vector<vector<double>>
清除和重新填充temp会影响数据中的值吗?
我已经找到了http://www.cplusplus.com/reference/vector/vector/push_back/ 但由于解释是&#34; val的内容被复制(或移动)到新元素。&#34;我不知道该怎么想。对我来说,这听起来像是一个矛盾。
我认为如果变量作为参考传递是没有多大意义的,因为它们可以像在我的情况下一样只在有限的范围内有效。 我的假设是对的吗?
答案 0 :(得分:5)
如果data
的类型为std::vector<std::vector<double>>
,那么您就可以了:temp
的值副本将被采用;因此,在您将temp
作为push_back
参数后,emplace_back
可以随意使用// First row of data
{
std::vector<double> temp = {1, 2, 3}; /*ain't C++11 brilliant?*/
data.emplace_back(std::move(temp)); /*do not use temp after this line -
use scope blocks so you're not tempted*/
}
。
但是,如果你对矢量的分配器搞砸了,那么你可能需要更加小心。
使用安置(请参阅temp
)可以避免不必要的深层复制:
nc
你可以做一个单行,但实际上我怀疑你想要更加谨慎地填充UserTest2
。所以我把两条线分开了。
答案 1 :(得分:1)
正如您在doc中所看到的,push_back
函数
void push_back (const value_type& val);
void push_back (value_type&& val);
第一个对val
进行const引用并将其复制到向量中。第二个使用右值引用(有关详细信息,请参阅move sematics),将 val
移动到向量中,使源向量为空。
它们都不存储对向量内的临时对象的引用。
第一个版本将在您传递时调用,例如,局部变量。
std::vector<std::vector<double>> v;
std::vector<double> lv = {1, 3, 7};
v.push_back(lv);
第二个 - 当您传递临时变量或显式移动变量
时v.push_back(std::vector<double>({0, 17, 42}));
v.push_back(std::move(lv));
答案 2 :(得分:1)
“复制”是指push_back(temp)和“(或者移动)”是指push_back(std :: move(temp))