我是 C++ 新手。我有一个大小为 n 的向量。我想在矢量广告中搜索新矢量中的正值和负值。我不知道正值和负值的数量。
谁能帮我?
这是使用标准库中的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; }
);
如果您可以重新排列源向量中的项目,那么执行以下操作可能是最简单的:
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());
假设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
是因为您不需要在任何意义上修改原始向量,您只是在读取它的值。
@Shos 答案的变体,涉及较少的指针,可能更容易阅读:
using std::vector;
vector<int> pos, neg;
for (auto& el : v)
{
if (el >= 0)
pos.push_back(el);
else
neg.push_back(el);
}