c++ - vector 比较

标签 c++

vector 函数 emplace() 我的安置功能不起作用。任何帮助将不胜感激

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();
   }
 }
}

最佳答案

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

因为 vec2 以四个值 0 开始填充,所以除非 *iter1 == 0,否则您永远找不到 *iter1 <= *iter2 的元素。

您不想对其进行零初始化以避免分配,而是希望保留空间。

vec2.reserve(vec1.size());

然后您可以使用 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;
}

现场演示:http://ideone.com/o5td9K

关于c++ - vector 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738717/

相关文章:

c++ - CUDAMemcpy 对我来说毫无意义......为什么我要在普通 C++ 中指定设备内存?

android - 无法在 JNI 中分离头文件和源文件

c++ - 未显示继承类

c++ - 四嵌套 unordered_map 怪物的替代方案?

c++ - 用表情符号拆分字符串

c++ - 通过指针调用具有未知参数计数的函数的简单方法

c++ - 在没有一个特定程序窗口的情况下截取屏幕截图

c++ - 调用 delete [] 会使程序崩溃,但在调试时不会

android - 找不到 opencv.hpp?安卓NDK

C++通过UDP发送数据包但没有收到