Как скопировать один вектор в другой при условии, что элементы первого имеют тип с большим диапазоном значений нежели тип элементов второго?
Причем элементы первого вектора, значения которых выходят за границы типа данных элементов второго вектора, не копировать.
Например, vector<__int64> скопировать в vector<__int16> так, чтобы в vector<__int16> были только те значения из vector<__int64>, которые лежат в диапазоне от -32768 до 32767.
Ответ
В одиннадцатом стандарте (C++11) можно наваять что-нибудь в духе:
#include
int main()
{
std::vector<__int64> vector64 = {1, 2, 3, 1234567, 5};
std::vector<__int16> vector16(vector64.size());
auto it = std::copy_if(vector64.begin(), vector64.end(), vector16.begin(), [&](__int64 item){ return (INT16_MIN <= item && item <= INT16_MAX); });
vector16.resize(std::distance(vector16.begin(), it));
}
Или более общий вариант:
#include
// случае использования не только для целочисленных типов, а для любых конрертируемых:
//template
int main()
{
std::vector<__int64> vector64 = { 1, 2, 3, 1234567, 5 };
std::vector<__int16> vector16;
copyIfPossible(vector64, vector16);
std::vector
Комментариев нет:
Отправить комментарий