J'ai le code suivant qui copie un std::vector a
dans un autre std::vector b
, mais avec 2 comme index de départ. Comme les deux vecteurs ont une longueur de 4, il en résulte une écriture hors-limites. Je voudrais laisser ce code jeter une exception, mais comment puis-je faire cela? Le code ci-dessous se bloque avec une erreur de segmentation.Comment lancer une exception pour écrire hors limites avec std :: transform?
#include <vector>
#include <iostream>
int main()
{
std::vector<double> a = {1, 2, 3, 4};
std::vector<double> b(4);
try
{
std::transform(a.begin(), a.begin()+4, b.begin()+2,
[](const double d) { return d; });
}
catch (std::exception& e)
{
std::cout << "EXCEPTION: " << e.what() << std::endl;
return 1;
}
return 0;
}
Sans rapport avec votre problème, mais si vous ne faites que copier un vecteur dans un autre, pourquoi utiliser 'std :: transform' au lieu de' std :: copy'? –
L'usecase est un peu plus complexe, car je convertis des types dans la fonction lambda. J'ai rencontré ce problème et fait l'exemple le plus simple pour montrer mon problème. – Chiel