Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++ - Fatal编程技术网

C++ 矢量比较

C++ 矢量比较,c++,C++,向量函数安放() 我的定位功能不起作用。任何帮助都将不胜感激 vector <int> vec1; vector <int> vec2(4,0); vector <int>::iterator iter1; vector <int>::iterator iter2; srand(time(NULL)); for(i=0; i<5; i++){ n =rand()%10+1; vec1.push_back(n); } for(iter1=

向量函数安放() 我的定位功能不起作用。任何帮助都将不胜感激

vector <int> vec1;
vector <int> vec2(4,0);
vector <int>::iterator iter1;
vector <int>::iterator iter2;

srand(time(NULL));

for(i=0; i<5; i++){
n =rand()%10+1;
vec1.push_back(n);
}

for(iter1=vec1.begin();iter1<vec1.end();iter1++){

 for(iter2=vec2.begin();iter2<vec2.end();iter2++){

   if(*iter1<=*iter2){
  //vec2.emplace(iter1,*iter1);
  //print();
   }
 }
}
vec1;
向量vec2(4,0);
向量::迭代器iter1;
向量::迭代器iter2;
srand(时间(空));

对于(i=0;i您尝试执行的操作类似于插入排序。 在每个步骤中,您将检查向量2中的每个元素,并将新元素放在它所属的位置(while循环)

然后,您可以使用
std::lower_bound
来查找插入位置,而不是for循环:

#include <iostream>
#include <vector>
#include <algorithm>

void print_vec(const char* label, const std::vector<int>& vec) {
    std::cout << label << ": ";
    for (int v : vec) {
        std::cout << v << ", ";
    }
    std::cout << "\n";
}

int main() {
    std::vector <int> vec1 { 4, 1, 2, 2, 5 };
    std::vector <int> vec2;

    print_vec("v1", vec1);

    vec2.reserve(vec1.size());

    for (int v : vec1) {
        auto it = std::lower_bound(vec2.begin(), vec2.end(), v);
        if (it == vec2.end() || *it != v)
            vec2.emplace(it, v);
        print_vec("v2", vec2);
    }

    print_vec("Fin", vec2);


    return 0;
}
#包括
#包括
#include

除非vector1中的值为0,否则您的if条件似乎不会进入。即使在这种情况下,它也不会真正执行您想要的操作。您确定问题出在emplace而不是if上吗?您能解释一下您所说的“emplace功能不起作用”是什么意思吗?另一方面,您可能需要重新考虑如何对vector2进行排序,有许多更好的算法。
vec2.reserve(vec1.size());
#include <iostream>
#include <vector>
#include <algorithm>

void print_vec(const char* label, const std::vector<int>& vec) {
    std::cout << label << ": ";
    for (int v : vec) {
        std::cout << v << ", ";
    }
    std::cout << "\n";
}

int main() {
    std::vector <int> vec1 { 4, 1, 2, 2, 5 };
    std::vector <int> vec2;

    print_vec("v1", vec1);

    vec2.reserve(vec1.size());

    for (int v : vec1) {
        auto it = std::lower_bound(vec2.begin(), vec2.end(), v);
        if (it == vec2.end() || *it != v)
            vec2.emplace(it, v);
        print_vec("v2", vec2);
    }

    print_vec("Fin", vec2);


    return 0;
}