gpt4 book ai didi

C++ 将 pair 的 vector 复制到 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:43 28 4
gpt4 key购买 nike

我有一个 vector 对,我需要将它们线性复制到一个整数 vector 。我有以下运行良好的代码,但考虑到 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,并且可能“讨厌”使用循环进行线性复制

你可以像这样使用仿函数:

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<<" ";

关于C++ 将 pair<int,int> 的 vector 复制到 vector<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19263699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com