如何从一个向量中删除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);
}
答案 0 :(得分:1)
不清楚为什么v2
的目标大小为v1.size() - 1
,排序后所有元素v1.size()
应为0且v2.size()
等于{{1}的大小在排序之前。错误排序的问题 - 您初始化v1
和ind
错误的地方。它应该在第一个循环内(注意你不需要保留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)