我是c ++的新手。我有一个大小为n的向量。我想在新向量中搜索向量广告存储中的正值和负值。我不知道正值和负值的数量。
任何人都可以帮助我吗?
答案 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);
}