for(iter2=vec2.begin();iter2<vec2.end();iter2++){
Так начинается vec2 заселена с четырьмя значениями 0, вы никогда не найти элемент, где * Iter1 < = * iter2 если * Iter1 == 0.
Вместо нуля не инициализирует его, чтобы избежать распределения , вы хотите reserve
пространство.
vec2.reserve(vec1.size());
, а затем вместо того, чтобы для цикла вы можете использовать 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;
}
Живая демонстрация: http://ideone.com/o5td9K
Похоже, ваш _If condition_ не войдет, если значение в vector1 равно 0. Даже в этом случае это не делает то, что вы хотите. Вы уверены, что проблема связана с emplace, а не с if? Можете ли вы объяснить, что вы имеете в виду, когда говорите, что ваша функция emplace не работает? Как в стороне, вам может потребоваться пересмотреть порядок сортировки vector2, там есть несколько лучших алгоритмов. https://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_of_algorithms –