我有一些代码(来自https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers):
uint32_t glfwExtensionCount = 0;
const char** glfwExtensions;
glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
std::vector<const char*> extensions(glfwExtensions, glfwExtensions + glfwExtensionCount); // which constructor is used here?
一切都可以编译和运行,但是我不知道向量构造器中会发生什么。
答案 0 :(得分:4)
那是
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
(https://en.cppreference.com/w/cpp/container/vector/vector中的#4)。 它从一系列输入迭代器构造一个向量。
C ++迭代器旨在与指针兼容,即,指针是有效的迭代器。
答案 1 :(得分:3)
上面的vector定义使用range
构造函数。 signature是
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
例如:
int main() {
int a[] = {1, 2, 3};
vector<int> v(a + 1, a + 3);
for (int x : v) {
cout << x << endl;
}
return 0;
}
构建并运行给出(source)
2
3
迭代器从begin +1开始到最后一个位置,这就是为什么从向量构造中省略第一个元素的原因。