将正数和负数存储在不同的向量中 我是C++新手。我有一个大小为n的向量。我想在矢量ad中搜索,在新矢量中存储正值和负值。我不知道正负值的数目

将正数和负数存储在不同的向量中 我是C++新手。我有一个大小为n的向量。我想在矢量ad中搜索,在新矢量中存储正值和负值。我不知道正负值的数目,c++,vector,C++,Vector,有人能帮我吗?假设v是你的std::vector向量,并且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)); els

有人能帮我吗?

假设
v
是你的
std::vector
向量,并且
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;
向量pos,neg;
for(vector::const_迭代器it=v.cbegin();it!=v.cend();it++){
如果((*it)>=0)位置推回((*it));
否则负推回((*it));
}

此处使用的是
std::vector::const_迭代器,因为您不需要在任何意义上修改原始向量,您只需读取其值。

如果您可以重新排列源向量中的项,可能最容易执行以下操作:

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());
autopart=std::partition(input.begin(),input.end(),[](int p){return p<0;});
std::vector neg(input.begin(),part);
std::vector pos(part,input.end());

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

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

std::partition_copy(
    src.begin(), src.end(),
    back_inserter(neg),
    back_inserter(pos),
    [](int value){ return value < 0; }
);
标准:向量src,neg,pos; 分区拷贝( src.begin(),src.end(), 背面插入器(neg), 背面插入器(位置), [](int值){返回值<0;} );
是@Shos答案的一种变体,包含更少的指针,可能更容易阅读:

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

for (auto& el : v) 
{
    if (el >= 0) 
        pos.push_back(el);
    else 
        neg.push_back(el);
}
使用std::vector;
向量pos,neg;
用于(自动和el:v)
{
如果(el>=0)
位置推回(el);
其他的
负推回(el);
}

如果您了解该语言,这里的基本解决方案很简单,那么,你能试着更具体地说明你正在努力解决的部分和/或到目前为止你已经尝试了什么吗?你能告诉我们你已经做了什么吗?为什么你觉得这需要一个基于向量的解决方案?@Craig我想他会认为这是用向量解决的,因为他说
我不知道正负数价值观
@Craig:你认为有什么特别的理由相信另一种可能性会更高,还是你恰恰相反?@H'H告诉我,这个问题/解决方案有什么困难?说真的,我对不明显的东西感兴趣。检查一个数字是正数还是负数?还是怎样(可能是迭代器,但你又回到大小和下标,或HORILICITCUTU,你读文档……)@ H2CO3,正如我所说的,是C++中的新的,我不知道这个迭代器和推回……对不起,我不如你们这些专家,我问一些明显的问题……这里的重点是你不知道,因为你没有阅读文档,不是因为你是C++的新手。再说一遍——如果你作为初学者不知道迭代器,那不是问题。稍后您将阅读有关它们的内容。但是,老实说,你能想出一个主意来迭代向量并根据它们是负的还是正的来选择元素吗?这是一个非常简单、非常明显的解决方案,它不需要任何C++知识,只是一点常识。不错,虽然OP可能会惊讶地发现<代码> 0 /代码>正整数容器:确实是非常巧妙的解决方案。@ JuangopaZa:他可能。因为他没有说如何处理零,我猜他真的是指负数和非负数(虽然我可能应该明确地说)。这变得更好了。我忍不住要+1这个。不是因为我认为这是一个好的解决方案,而是因为我刚刚发现了
partition\u copy
:d有限+1,因为这是一个好的解决方案。尽管我应该补充一点,这个函数是在C++11中引入的(但答案使用的lambda也是如此)。