这是我第一次学习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);
然后将beginend之间的数组元素复制到 vector 中。
(这是标准库中非常常见的接口(interface)。您会看到很多。)
(旁注:我认为,如果您不熟悉从数组到指针的隐式转换以及指针算术的性质,则您的解释与此同等重要。)

关于c++ - C++ vector 和sizeof,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64442450/

10-08 22:27