这里使用了哪个 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 开始到最后一个位置,这就是向量构造中省略第一个元素的原因。
我有一段代码(来自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 开始到最后一个位置,这就是向量构造中省略第一个元素的原因。