这里使用了哪个 std::vector 构造函数?

Which std::vector constructor is used here?

我有一段代码(来自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?

一切都编译和工作,但我不明白向量构造函数中发生了什么。

那是

template< class InputIt >
vector( InputIt first, InputIt last,
        const Allocator& alloc = Allocator() );

https://en.cppreference.com/w/cpp/container/vector/vector 中的#4)。 它从一系列输入迭代器构造一个向量。

C++ 迭代器设计为与指针兼容,即指针是有效的迭代器。

以上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 开始到最后一个位置,这就是向量构造中省略第一个元素的原因。