我正在使用visual studio 2013.我正在尝试从向量中获取子向量:
std::vector <Ponto> pontosDeControle;
std::vector<Ponto> subPontosDeControle;
向量pontosDeControle填充了一些对象,然后我从位置i得到子向量到pontosDeControle.size() - 1:
subPontosDeControle = std::vector<Ponto>(&pontosDeControle[i], &pontosDeControle[pontosDeControle.size()]);
其中i小于pontosDeControle.size() - 3。
此代码返回调试断言失败:向量下标超出范围。但是,在发布模式下工作正常。
我在这里没有看到问题。
答案 0 :(得分:2)
在调试模式下,编译器会检查此表达式中使用的索引
.nivoSlider is not a function
超出范围。
您可以改为编写
pontosDeControle[pontosDeControle.size()]
这将更加明确和正确。
答案 1 :(得分:1)
对于大小为v
的向量v.size()
,您只能访问索引0
... v.size() - 1
(当然,如果v.siz() == 0
则无法访问指数)。如果你想获得一个指向最后一个元素的指针(你可以合法地得到这个地址),你可以使用这样的东西:
v.data() + v.size()
对于您要使用的操作,您不需要使用元素的地址:您可以使用迭代器:
subPontosDeControle.assign(pontosDeControl.begin() + i, pontosDeControl.end());