如何从一个向量中删除min元素并添加到另一个向量,而第一个为空?

时间:2018-05-10 18:12:12

标签: c++ c++11

如何从一个向量中删除min元素并在第一个为空时添加到另一个向量?` 这不起作用:/ 它看起来像选择算法

#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>&vec) {
    for (int i = 0; i < vec.size(); i++)
        cout << vec[i] << endl;
}


int main()
{
    vector<int>v1{ 458,525,255,336,258 };
    int size = v1.size() - 1;
    vector<int>v2;
    int min = v1[0];
    int i;
    int ind = 0;
    while (v2.size() != size) {
        for (i = 1; i < v1.size(); i++)
        {
            if (v1[i] < min)
            {
                min = v1[i];
                ind = i;
            }
        }
        v2.push_back(min);
        v1.erase(v1.begin() + ind);
    }
    print(v1);
    cout << " " << endl;
    print(v2);

}

2 个答案:

答案 0 :(得分:1)

不清楚为什么v2的目标大小为v1.size() - 1,排序后所有元素v1.size()应为0且v2.size()等于{{1}的大小在排序之前。错误排序的问题 - 您初始化v1ind错误的地方。它应该在第一个循环内(注意你不需要保留min值,索引就足够了):

min

但您最好使用标准算法std::min_element()

while (v1.size()) {
    size_t ind = 0;
    for (size_t i = 1; i < v1.size(); i++)
    {
        if (v1[i] < v1[ind])
        {
            ind = i;
        }
    }
    v2.push_back(v1[ind]);
    v1.erase(v1.begin() + ind);
}

答案 1 :(得分:1)

这是应该如何:

df$z <- df$x * min(df$y, 1)