分配给 (n,0) 的 std::vector<int> 不可迭代
std::vector<int> allocated with (n,0) is not iterable
考虑以下代码:
#include <vector>
#include <iostream>
void monitor_vector(std::vector<int> myV)
{
std::vector<int>::iterator it = myV.begin();
std::cout << "Vector size: " << myV.size() << std::endl;
while (*it)
{
std::cout << "Element " << it-myV.begin() << ": " << *it << std::endl;
it++;
}
}
int main()
{
std::vector<int> myVector(4,1);
monitor_vector(myVector);
return 0;
}
基本上,我创建了一个包含 4
个元素的 std::vector<int>
,并为每个元素分配 1
。当我执行这段代码时,一切都很好。输出显示每个元素。
然而,当我用这一行执行它时
std::vector<int> myVector(4,1);
替换为此行:
std::vector<int> myVector(4,0);
我看不到任何输出。输出为:
yilmazali@yilmazali:~/cpp_practice$ g++ -o la vector_practice.cpp
yilmazali@yilmazali:~/cpp_practice$ ./la
Vector size: 4
yilmazali@yilmazali:~/cpp_practice$
为什么会忽略默认整数值的元素?尽管如此,他们仍然是 std::vector
的成员。
感谢您的宝贵时间,
阿里
你迭代 while (*it)
.
如果用零填充向量,*it == 0
因此 if (*it)
就像 if (false)
:永远不会执行循环体。
相反,在 it != myV.end()
时循环
考虑以下代码:
#include <vector>
#include <iostream>
void monitor_vector(std::vector<int> myV)
{
std::vector<int>::iterator it = myV.begin();
std::cout << "Vector size: " << myV.size() << std::endl;
while (*it)
{
std::cout << "Element " << it-myV.begin() << ": " << *it << std::endl;
it++;
}
}
int main()
{
std::vector<int> myVector(4,1);
monitor_vector(myVector);
return 0;
}
基本上,我创建了一个包含 4
个元素的 std::vector<int>
,并为每个元素分配 1
。当我执行这段代码时,一切都很好。输出显示每个元素。
然而,当我用这一行执行它时
std::vector<int> myVector(4,1);
替换为此行:
std::vector<int> myVector(4,0);
我看不到任何输出。输出为:
yilmazali@yilmazali:~/cpp_practice$ g++ -o la vector_practice.cpp
yilmazali@yilmazali:~/cpp_practice$ ./la
Vector size: 4
yilmazali@yilmazali:~/cpp_practice$
为什么会忽略默认整数值的元素?尽管如此,他们仍然是 std::vector
的成员。
感谢您的宝贵时间, 阿里
你迭代 while (*it)
.
如果用零填充向量,*it == 0
因此 if (*it)
就像 if (false)
:永远不会执行循环体。
相反,在 it != myV.end()