矢量函数emplace() 我的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();
}
}
}
答案 0 :(得分:2)
for(iter2=vec2.begin();iter2<vec2.end();iter2++){
因为vec2开始填充四个值0,所以除非* iter1 == 0,否则永远不会找到* iter1&lt; = * iter2的元素。
不是将其初始化为零以避免分配,而是希望reserve
空格。
vec2.reserve(vec1.size());
然后代替for循环,您可以使用std::lower_bound
来查找插入位置:
#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;
}
答案 1 :(得分:0)
您要做的就是插入排序。 https://en.wikipedia.org/wiki/Insertion_sort 有伪代码。在每一步中,您将检查向量2中的每个元素,并将新元素放在它所属的位置(循环)。