C ++表达式:向量下标超出范围错误Line:1733

时间:2019-03-05 04:18:00

标签: c++

当我尝试使用此功能删除矢量中NaN项时

在下文中,unsorted是一个充满字符串项的向量,而sanitised是一个空的double向量

...
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
...

知道为什么吗?谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

请注意,在C ++ 11和更高版本中,您可以使用基于范围的循环更轻松地迭代向量:

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

答案 1 :(得分:0)

如果要获取向量的大小(项的数量),则应使用vector.size()而不是sizeof(vector),它会返回以字符为单位的内存中向量的大小(C ++标准) )。