初始化一对向量并转换它们
Initialising a pair of vectors and transforming them
我想在转换函数中使用一对向量而不是 两个向量,但不知道如何初始化 [=] 中的两个向量12=] 函数。
我有以下代码并且运行良好:
vector<Point> group_pts(size);
vector<int> group_rs(size);
std::transform(group.begin(), group.end(), group_pts.begin(),
[](const Circle& c1) -> Point { return c1.p; } );
std::transform(group.begin(), group.end(), group_rs.begin(),
[](const Circle& c1) -> int { return c1.radius; } );
std::pair < vector<Point>, vector<int> > group_dscrp = make_pair(group_pts, group_rs);
return group_dscrp;
但是,我需要这样的东西,但不知道应该如何初始化
std::pair < vector<Point>, vector<int> > group_dscrp = INIT;
std::transform(group.begin(), group.end(), group_dscrp.first.begin(),
[](const Circle& c1) -> Point { return c1.p; } );
std::transform(group.begin(), group.end(), group_dscrp.second.begin(),
[](const Circle& c1) -> int { return c1.radius; } );
return group_dscrp;
您的问题的答案已在评论中提及(来自@MatthieuBrucher)。
std::pair<vector<Point>, vector<int>> group_dscrp{size, size}
将初始化这对向量。
但是,如果您需要一个包含 Circle
的 Point
和 radius
成员的数据结构,您可能需要重新考虑(如@WhozCraig 所述)
std::vector<std::pair<Point, int>> group_dscrp
现在您可以再次使用 std::transform
std::transform(group.cbegin(), group.cend(), std::back_inserter(group_dscrp),
[](const Circle& circle) {return std::pair<Point, int>{ circle.p, circle.radius }; });
或者使用一个简单的基于范围的循环插入到 group_dscrp
中,如下所示:
std::vector<Circle> group;
std::vector<std::pair<Point, int>> group_dscrp;
group_dscrp.reserve(size);
for (const Circle& circle : group) group_dscrp.emplace_back(circle.p, circle.radius);
我想在转换函数中使用一对向量而不是 两个向量,但不知道如何初始化 [=] 中的两个向量12=] 函数。
我有以下代码并且运行良好:
vector<Point> group_pts(size);
vector<int> group_rs(size);
std::transform(group.begin(), group.end(), group_pts.begin(),
[](const Circle& c1) -> Point { return c1.p; } );
std::transform(group.begin(), group.end(), group_rs.begin(),
[](const Circle& c1) -> int { return c1.radius; } );
std::pair < vector<Point>, vector<int> > group_dscrp = make_pair(group_pts, group_rs);
return group_dscrp;
但是,我需要这样的东西,但不知道应该如何初始化
std::pair < vector<Point>, vector<int> > group_dscrp = INIT;
std::transform(group.begin(), group.end(), group_dscrp.first.begin(),
[](const Circle& c1) -> Point { return c1.p; } );
std::transform(group.begin(), group.end(), group_dscrp.second.begin(),
[](const Circle& c1) -> int { return c1.radius; } );
return group_dscrp;
您的问题的答案已在评论中提及(来自@MatthieuBrucher)。
std::pair<vector<Point>, vector<int>> group_dscrp{size, size}
将初始化这对向量。
但是,如果您需要一个包含 Circle
的 Point
和 radius
成员的数据结构,您可能需要重新考虑(如@WhozCraig 所述)
std::vector<std::pair<Point, int>> group_dscrp
现在您可以再次使用 std::transform
std::transform(group.cbegin(), group.cend(), std::back_inserter(group_dscrp),
[](const Circle& circle) {return std::pair<Point, int>{ circle.p, circle.radius }; });
或者使用一个简单的基于范围的循环插入到 group_dscrp
中,如下所示:
std::vector<Circle> group;
std::vector<std::pair<Point, int>> group_dscrp;
group_dscrp.reserve(size);
for (const Circle& circle : group) group_dscrp.emplace_back(circle.p, circle.radius);