我正在使用Visual Studio2013。我正在尝试从 vector 获取子 vector :

std::vector <Ponto> pontosDeControle;
std::vector<Ponto> subPontosDeControle;

vector pontosDeControle充满了一些对象,然后我从位置i到pontosDeControle.size()-1获得子 vector :
   subPontosDeControle = std::vector<Ponto>(&pontosDeControle[i], &pontosDeControle[pontosDeControle.size()]);

其中我小于pontosDeControle.size()-3。

这段代码返回调试断言失败: vector 下标超出范围。但是,在 Release模式下工作正常。

我在这里没有看到问题。

最佳答案

在 Debug模式下,编译器检查此表达式中使用的索引

pontosDeControle[pontosDeControle.size()]

超出范围。

你可以写
subPontosDeControle.assign( std::next( pontosDeControle.begin(), i ),
                            pontosDeControle.end() );

这将更加清晰和正确。

关于c++ - vector 下标超出范围-C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30417314/

10-10 03:42