Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::upper_bound检索向量的索引,索引超出范围_C++_Vector_Upperbound - Fatal编程技术网

C++ 使用std::upper_bound检索向量的索引,索引超出范围

C++ 使用std::upper_bound检索向量的索引,索引超出范围,c++,vector,upperbound,C++,Vector,Upperbound,我正在尝试使用std::upper_bound根据向量的值检索向量的索引。但由于某种原因,以下代码将tmpKey设置为2与我的预期值1相等。有什么事情被认为是大错特错的吗 int main() { float time = 30.0000000; std::vector<float> positionKeyTimes = { 0.000000000, 30.0000000 }; auto it = std::upper_bound(positionKeyTi

我正在尝试使用
std::upper_bound
根据向量的值检索向量的索引。但由于某种原因,以下代码将
tmpKey
设置为
2
与我的预期值
1
相等。有什么事情被认为是大错特错的吗

int main()
{
    float time = 30.0000000;
    std::vector<float> positionKeyTimes = { 0.000000000, 30.0000000 };

    auto it = std::upper_bound(positionKeyTimes.begin(), positionKeyTimes.end(), time);
    auto tmpKey = (size_t)(it - positionKeyTimes.begin());

    std::cout << tmpKey << "\n";

    std::cin.get();
}
intmain()
{
浮动时间=30.0000000;
std::vector positionKeyTimes={0.000000000,30.0000000};
auto it=std::上限(positionKeyTimes.begin(),positionKeyTimes.end(),time);
auto-tmpKey=(size_t)(it-positionKeyTimes.begin());
标准::cout

返回一个迭代器,该迭代器指向范围[first,last]中大于值的第一个元素,如果未找到此类元素,则返回last

向量中没有大于30的元素,因此返回结束迭代器

为了获得您的期望值,您可以使用

返回一个迭代器,该迭代器指向[first,last]范围内的第一个元素,该元素不小于(即大于或等于)值,如果未找到此类元素,则返回last

记住

必须根据表达式元素<值或comp(元素,值)对范围[第一个,最后一个]进行分区,即表达式为真的所有元素必须位于表达式为假的所有元素之前。完全排序的范围符合此标准

返回一个迭代器,该迭代器指向范围[first,last]中大于值的第一个元素,如果未找到此类元素,则返回last

向量中没有大于30的元素,因此返回结束迭代器

为了获得您的期望值,您可以使用

返回一个迭代器,该迭代器指向[first,last]范围内的第一个元素,该元素不小于(即大于或等于)值,如果未找到此类元素,则返回last

记住

必须根据表达式元素<值或comp(元素,值)对范围[第一个,最后一个]进行分区,即表达式为真的所有元素必须位于表达式为假的所有元素之前。完全排序的范围符合此标准


这是有道理的。那么begin()迭代器的索引为1,end()迭代器的索引为元素的大小,这是真的吗?我的印象是begin()为零,end()为大小-1。@Whitwohoa不,end()对应的索引为大小。请参见示例。这是有道理的。begin()是真的吗迭代器的索引为1,end()迭代器的索引为元素的大小?我的印象是begin()为零,end()为大小-1。@whitwhoa否,end()对应的索引为大小。请参见示例。