2

我是 C++ 新手。我有一个大小为 n 的向量。我想在矢量广告中搜索新矢量中的正值和负值。我不知道正值和负值的数量。

谁能帮我?

4

4 回答 4

11

这是使用标准库中的std::partition_copy的另一个解决方案:

std::vector<int> src, neg, pos;

std::partition_copy(
    src.begin(), src.end(),
    back_inserter(neg),
    back_inserter(pos),
    [](int value){ return value < 0; }
);
于 2013-07-05T11:52:19.713 回答
3

如果您可以重新排列源向量中的项目,那么执行以下操作可能是最简单的:

auto part = std::partition(input.begin(), input.end(), [](int p) { return p < 0; });

std::vector<int> neg(input.begin(), part);
std::vector<int> pos(part, input.end());
于 2013-07-05T11:48:00.233 回答
2

假设v 是您的std::vector<int>向量并且0是正数,您只需要遍历向量并将正数存储在一个向量中,将负数存储在另一个向量中:

using std::vector;
vector<int> pos, neg;

for (vector<int>::const_iterator it = v.cbegin(); it != v.cend(); it++) {
    if ((*it) >= 0) pos.push_back((*it));
    else neg.push_back((*it));
}

在这里使用Astd::vector<int>::const_iterator是因为您不需要在任何意义上修改原始向量,您只是在读取它的值。

于 2013-07-05T11:41:42.940 回答
1

@Shos 答案的变体,涉及较少的指针,可能更容易阅读:

using std::vector;
vector<int> pos, neg;

for (auto& el : v) 
{
    if (el >= 0) 
        pos.push_back(el);
    else 
        neg.push_back(el);
}
于 2017-12-06T14:24:38.167 回答