【发布时间】:2017-06-24 14:30:32
【问题描述】:
我有以下代码将std::vector a 复制到另一个std::vector b,但以2 作为起始索引。由于两个向量的长度都是 4,这会导致写入越界。我想让这段代码抛出异常,但我该怎么做呢?下面的代码因分段错误而崩溃。
#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::transform而不是std::copy? -
用例有点复杂,因为我在 lambda 函数中转换类型。我遇到了这个问题,并做了一个最简单的例子来说明我的问题。
标签: c++ c++11 exception exception-handling std