将具有相同长度的两个int向量转换为C ++中的一对int对

时间:2013-08-28 02:20:01

标签: c++ vector c++-standard-library

在C ++中,如果我有两个int的向量:

A = [1, 2, 3 ,4]; 
B = [1, 2, 3, 4]; 

如何将它们合并为一对对象:

[(1,1), (2,2), (3,3), (4, 4)]

当然我可以用循环来做到这一点。但是我们可以使用合适的STL函数和迭代器吗?

2 个答案:

答案 0 :(得分:20)

您可以使用算法:

std::vector<std::pair<int, int>> target;
target.reserve(A.size());
std::transform(A.begin(), A.end(), B.begin(), std::back_inserter(target),
               [](int a, int b) { return std::make_pair(a, b); });

答案 1 :(得分:6)

我同意DietmarKühl的回答确实完全问题的内容,但我也同意Kakadur的评论。循环隐藏在std::transform()中,因此复杂性是相同的。有些人会判断,但如果没有直接证明某种方式更好比另一种更强,我倾向于选择最易读且最不详细的版本:

// create a vector of length of the smaller vector
std::vector<std::pair<int, int>> target( A.size() < B.size() ? A.size() : B.size() );

for (unsigned i = 0; i < target.size(); i++)
    target[i] = std::make_pair(A[i], B[i]);

P.S。 上面的代码为target向量分配了足够的空间,因此可以避免push_back(在重新分配的情况下)的潜在开销。