Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从一个向量中删除最小元素并添加到另一个向量,而第一个向量变为空?_C++_C++11 - Fatal编程技术网

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;icout在对所有元素排序后,
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çoisAndrieux
size
等于
v1.size()-1
为什么它永远不会是假的?(为什么它是-1是另一个问题)@Slava那是
v2.size()!=v1.size()
在我看来,我错了!我不明白,那会增加最小元素五次,可能擦除不起作用我猜问题是你在第一次迭代后没有重置
min
ind
。它仍然有第一个最小值,根据定义,它不大于任何其他值。“那不起作用”这不是对您的问题的有用解释。请解释错误的性质。它是否编译?是否运行?您期望得到什么结果?您得到了什么结果,以及它与您期望的结果相比如何?请花点时间阅读。@FrançoisAndrieux
size
等于
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;

}