用(4,0)初始化的std::vector<int>为何无法遍历输出元素?
为什么用
std::vector<int> myVector(4,0)初始化后无法遍历输出元素? 兄弟,我敢打赌你大概率是栽在遍历代码的条件判断上了!你用std::vector<int> myVector(4,1)时元素全是1,用(4,0)时全是0,这俩初始化的区别刚好把你遍历逻辑里的小漏洞给揪出来了。
你是不是写了类似这样的遍历代码?
#include <iostream> #include <vector> int main() { std::vector<int> myVector(4, 0); for (int elem : myVector) { if (elem) { // 这里就是问题所在! std::cout << elem << " "; } } std::cout << "向量大小:" << myVector.size() << std::endl; return 0; }
在C++里,整数0会被隐式转换成布尔值false,所以当元素是0的时候,if(elem)的条件不成立,代码直接跳过了输出步骤;而元素是1的时候,会被转换成true,所以能正常输出所有元素。但向量的size()方法是直接返回容器里的元素个数,不管元素值是什么,所以你总能看到正确的大小输出。
解决办法
如果你想要输出所有元素,不管它的值是多少,直接去掉那个多余的条件判断就行:
#include <iostream> #include <vector> int main() { std::vector<int> myVector(4, 0); for (int elem : myVector) { std::cout << elem << " "; // 直接输出,不加条件 } std::cout << "\n向量大小:" << myVector.size() << std::endl; return 0; }
或者用迭代器遍历也一样,核心逻辑就是:别把元素本身的值当作是否输出的判断依据,除非你本来就只想输出非零元素。
另外也可以快速排查下是不是遍历索引写错了(比如for循环里i从1开始而不是0),不过这种情况两种初始化都会出问题,所以概率很低,最可能的还是条件判断的坑。
内容的提问来源于stack exchange,提问作者Ali Yılmaz
相关产品推荐
相关产品推荐

