当我尝试使用此函数以删除向量的项目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 标准))。