C++ 如何从一个向量中删除最小元素并添加到另一个向量,而第一个向量变为空?
如何从一个向量中删除最小元素并添加到另一个向量中,而第一个向量变为空?`C++ 如何从一个向量中删除最小元素并添加到另一个向量,而第一个向量变为空?,c++,c++11,C++,C++11,如何从一个向量中删除最小元素并添加到另一个向量中,而第一个向量变为空?` 这不起作用:/ 它看起来像selectsort算法 #include<iostream> #include<vector> using namespace std; void print(vector<int>&vec) { for (int i = 0; i < vec.size(); i++) cout << vec[i] <&
这不起作用:/ 它看起来像selectsort算法
#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);
}
#包括
#包括
使用名称空间std;
无效打印(矢量和矢量){
对于(int i=0;i cout在对所有元素排序后,v1.size()
的目标大小为什么为v1.size()-1
,现在还不清楚
等于排序前v1
的大小。排序不正确的问题-您初始化ind
和min
的位置错误。它应该在第一个循环中(注意,您不需要保留min
值,索引就足够了):
在对所有元素进行排序后,
v1.size()
的目标大小为什么为v1.size()-1
,现在还不清楚等于排序前v1
的大小。排序不正确的问题-您初始化ind
和min
的位置错误。它应该在第一个循环中(注意,您不需要保留min
值,索引就足够了):
以下是它应该是什么样子:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1{ 458, 525, 255, 336, 258 };
std::vector<int> v2;
while ( v1.size() ) {
auto m = std::min_element(v1.begin(), v1.end());
v2.push_back(*m);
v1.erase(m);
}
for (auto v : v1) std::cout << v << " "; std::cout << "\n";
for (auto v : v2) std::cout << v << " "; std::cout << "\n";
return 0;
}
#包括
#包括
#包括
int main(){
std::向量v1{4585255336258};
std::向量v2;
而(v1.size()){
autom=std::min_元素(v1.begin(),v1.end());
v2.推回(*m);
v1.擦除(m);
}
对于(auto v:v1)std::cout,应该是这样的:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1{ 458, 525, 255, 336, 258 };
std::vector<int> v2;
while ( v1.size() ) {
auto m = std::min_element(v1.begin(), v1.end());
v2.push_back(*m);
v1.erase(m);
}
for (auto v : v1) std::cout << v << " "; std::cout << "\n";
for (auto v : v2) std::cout << v << " "; std::cout << "\n";
return 0;
}
#包括
#包括
#包括
int main(){
std::向量v1{4585255336258};
std::向量v2;
而(v1.size()){
autom=std::min_元素(v1.begin(),v1.end());
v2.推回(*m);
v1.擦除(m);
}
对于(自动v:v1)标准::cout“这不起作用”这不是对您的问题的有用解释。请解释错误的性质。它是否编译?是否运行?您期望得到什么结果?您得到了什么结果,以及它与您期望的结果相比如何?请花点时间阅读。@FrançoisAndrieuxsize
等于v1.size()-1
为什么它永远不会是假的?(为什么它是-1是另一个问题)@Slava那是v2.size()!=v1.size()
在我看来,我错了!我不明白,那会增加最小元素五次,可能擦除不起作用我猜问题是你在第一次迭代后没有重置min
和ind
。它仍然有第一个最小值,根据定义,它不大于任何其他值。“那不起作用”这不是对您的问题的有用解释。请解释错误的性质。它是否编译?是否运行?您期望得到什么结果?您得到了什么结果,以及它与您期望的结果相比如何?请花点时间阅读。@FrançoisAndrieuxsize
等于v1.size()-1
为什么它永远不会是假的?(为什么它是-1是另一个问题)@Slava那是v2.size()!=v1.size()
在我看来,我错了!我不明白,那会增加最小元素五次,可能擦除不起作用我猜问题是你在第一次迭代后没有重置min
和ind
。它仍然有第一个最小值,根据定义,它不大于任何其他值。只有代码的答案是i完成。请解释您的解决方案如何回答问题或您对原始代码所做更改的目的。while(v1.size())
也可以写成while(!v1.empty())
而不是仅由代码组成的答案不完整。请解释您的解决方案如何回答问题或您对原始代码所做更改的目的。while(v1.size())
也可以写成while(!v1.empty())
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1{ 458, 525, 255, 336, 258 };
std::vector<int> v2;
while ( v1.size() ) {
auto m = std::min_element(v1.begin(), v1.end());
v2.push_back(*m);
v1.erase(m);
}
for (auto v : v1) std::cout << v << " "; std::cout << "\n";
for (auto v : v2) std::cout << v << " "; std::cout << "\n";
return 0;
}