这是我第一次学习C++中的 vector 。在下面的代码中,我不明白为什么数组“sixth”的输出为{16,2,77,29}。我认为输出应为{20,6,81,33}。
int myints[] = { 16, 2, 77, 29 };
std::vector<int> sixth(myints, myints + sizeof(myints) / sizeof(int));
for (std::vector<int>::iterator it = sixth.begin(); it != sixth.end(); ++it)
std::cout << " " << *it;
我的计算:
最佳答案
您完全误解了论点。
它们是迭代器(在这种情况下为指针),而不是“元素数量”和“对元素执行的操作”。
std::vector<int> sixth (myints, myints + sizeof(myints) / sizeof(int));
是相同的int* begin = &myints[0]; // Pointer to the first array element
int* end = &myints[4]; // Pointer "one past" the last array element
std::vector<int> sixth (begin, end);
然后将begin
和end
之间的数组元素复制到 vector 中。(这是标准库中非常常见的接口(interface)。您会看到很多。)
(旁注:我认为,如果您不熟悉从数组到指针的隐式转换以及指针算术的性质,则您的解释与此同等重要。)
关于c++ - C++ vector 和sizeof,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64442450/