Dav*_*Ren 10 c++ vector c++-standard-library
在C++中,如果我有两个向量int:
A = [1, 2, 3 ,4];
B = [1, 2, 3, 4];
Run Code Online (Sandbox Code Playgroud)
如何将它们合并到一对对矢量中:
[(1,1), (2,2), (3,3), (4, 4)]
Run Code Online (Sandbox Code Playgroud)
当然我可以通过循环来做到这一点.但是我们可以使用合适的STL函数和迭代器吗?
Die*_*ühl 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); });
Run Code Online (Sandbox Code Playgroud)
我同意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]);
Run Code Online (Sandbox Code Playgroud)
PS上面的代码为target向量分配了足够的空间,因此push_back可以避免(在重新分配的情况下)的潜在开销.