Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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++ C++;表达式:矢量下标超出范围错误行:1733_C++ - Fatal编程技术网

C++ C++;表达式:矢量下标超出范围错误行:1733

C++ C++;表达式:矢量下标超出范围错误行:1733,c++,C++,当我尝试使用此函数删除向量中不正确的项时 在下面的例子中,unsorted是一个填充了字符串项的向量,sanitized是一个空的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

当我尝试使用此函数删除向量中不正确的项时

在下面的例子中,
unsorted
是一个填充了字符串项的向量,
sanitized
是一个空的
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}
...

知道为什么吗?谢谢

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)
,它返回以字符为单位的内存中向量的大小(C++标准)

似乎您来自一个类似Python的背景,在这里,您通常需要一个神奇的
len(容器)
C++中的SigeOs回答了一个你可能不想问的问题,为了使事情更令人兴奋,编译器之间会有所不同,但在运行时,大部分时间都是恒定的。对于
vector
而言,它通常是24字节。如果向量是空的,或者有地址空间允许的尽可能多的元素。在您的隐式体验级别,寻找描述您的任务的实例方法,而不是包含您预期的单词/行为的全局运算符。
for (const auto& str : unsorted) {
    double x = stod(str);
    if (!isnan(x)) {
        sanitised.push_back(x);
    }
}