在C ++中,如果我有两个int
的向量:
A = [1, 2, 3 ,4];
B = [1, 2, 3, 4];
如何将它们合并为一对对象:
[(1,1), (2,2), (3,3), (4, 4)]
当然我可以用循环来做到这一点。但是我们可以使用合适的STL函数和迭代器吗?
答案 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
(在重新分配的情况下)的潜在开销。