在不同的向量中存储正数和负数

时间:2013-07-05 11:38:55

标签: c++ vector

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

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:10)

以下是使用标准库中的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; }
);

答案 1 :(得分: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());

答案 2 :(得分: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));
}

此处使用了std::vector<int>::const_iterator,因为您无需在任何意义上修改原始向量,只需读取其值。

答案 3 :(得分: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);
}