C 表达式:向量下标出范围错误线:1733

C++ Expression: vector subscript out of range error Line:1733

本文关键字:错误 范围 1733 下标 表达式 向量      更新时间:2023-10-16

当我尝试使用此函数以删除向量的项目nan

在下面,unsorted是一个充满字符串项目的向量,sanitised是一个空的double vector

...
1 void sensitising(vector <string> unsorted)
2 {
3    double x = 0;
4    for (int i = 0; i < sizeof(unsorted); i++)
5    {
6        x = stod(unsorted[i]);
7        if (isnan(x)==false)
8        {
9            sanitised.push_back(x);
10       }
11   }
12}
...

在第6行中丢下错误,抱怨向量下标出范围

如果第9行被cout << "is a number";替换,则在正确打印所有项目后,将丢弃错误

is a number
is a number
is a number
...

知道为什么吗?谢谢!

sizeof不会告诉您向量的长度。它告诉您实际对象的大小(字节)。

要获取存储在向量中的项目数,请使用unsorted.size()

请注意,在C 11及以后,您可以通过基于范围的循环更轻松地迭代向量:

for (const auto& str : unsorted) {
    double x = stod(str);
    if (!isnan(x)) {
        sanitised.push_back(x);
    }
}

如果要获取向量的大小(项目数量),则应使用vector.size()而不是sizeof(vector),以返回以chars计数的内存中的矢量大小(C 标准))。