当我尝试使用此功能删除矢量中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
...
知道为什么吗?谢谢!
答案 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 ++标准) )。