私はstd::vector a
を別のstd::vector b
にコピーしますが、2を開始インデックスとしてコピーするコードがあります。両方のベクトルの長さが4であるため、境界外の書き込みが発生します。このコードで例外をスローするようにしたいと思いますが、どうしたらいいですか?以下のコードは、セグメント化エラーでクラッシュします。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;
}
あなたの問題とは無関係ですが、ベクトルを別のベクトルにコピーするだけの場合は、 'std :: copy'の代わりに' std :: transform'を使用するのはなぜですか? –
私はラムダ関数の型を変換しているので、usecaseは少し複雑です。私はこの問題に遭遇し、私の問題を示す最も簡単な例を作りました。 – Chiel