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

时间:2019-06-03 16:06:15

标签: c++ stdvector

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

一切都可以编译和运行,但是我不知道向量构造器中会发生什么。

2 个答案:

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