我有一对向量,我需要将它们线性复制为一个整数向量。我下面的代码运行良好,但是考虑到C ++中的结构填充问题,我不确定它是否安全。
std::vector < std::pair<int, int> > test_vector;
for (int i=0;i<5;i++) {
test_vector.push_back(std::make_pair(i,i*5));
}
std::vector<int> int_vec(test_vector.size() * 2);
std::copy(reinterpret_cast<int*>(&(*test_vector.begin())),reinterpret_cast<int*>(&(*test_vector.end())),int_vec.begin());
现在,我的问题是-上面的代码安全吗?如果没有,是否有一种优雅的方法可以完成而不编写循环?
如何std::transform
和lambda函数?
std::vector<int> v;
std::transform(test_vector.begin(), test_vector.end(), std::back_inserter(v),
[&v](const std::pair<int, int> &p)
{ v.push_back( p.first);
return p.second ;});
如果您不能使用C ++ 11,并且可能“讨厌”使用循环进行线性复制
您可以像这样使用functor:
struct X{
X(std::vector<int> &x) :v(x){}
int operator () (const std::pair<int, int> &p)
{
v.push_back(p.first);
return p.second;
}
std::vector<int> &v;
};
std::vector<int> v; //Final vector
std::transform(test_vector.begin(),
test_vector.end(),
std::back_inserter(v),
X(v));
std::vector<int> ::iterator it;
for(it=v.begin() ; it!=v.end() ;++it)
std::cout<<*it<<" ";
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句