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(容器)
vector
而言,它通常是24字节。如果向量是空的,或者有地址空间允许的尽可能多的元素。在您的隐式体验级别,寻找描述您的任务的实例方法,而不是包含您预期的单词/行为的全局运算符。
for (const auto& str : unsorted) {
double x = stod(str);
if (!isnan(x)) {
sanitised.push_back(x);
}
}