使用std::make_index_sequence去访问vector,确保代码正确可行
时间: 2024-10-22 22:06:26 浏览: 32
`std::make_index_sequence`是C++14引入的一个工具,用于生成一系列从0开始递增的索引,非常适合于遍历数组或`std::vector`。这个序列可以用在`std::for_each`, `std::transform`, 或者其他需要迭代器的算法中。
下面是一个简单的例子,展示如何使用`std::make_index_sequence`来访问`std::vector`的每个元素:
```cpp
#include <vector>
#include <iostream>
#include <index_sequence>
// 创建一个包含5个元素的vector
std::vector<int> vec = {1, 2, 3, 4, 5};
template<size_t... Is>
void print_elements(std::index_sequence<Is...>) {
(std::cout << "Element at index " << Is << ": " << vec[Is] << '\n', ...);
}
int main() {
std::make_index_sequence<std::vector<int>::size_type>::type seq;
print_elements(seq); // 这会打印出vector的每一个元素
return 0;
}
```
在这个例子中,`print_elements`函数接受一个`std::index_sequence`作为参数,并通过折叠表达式展开,依次访问`vec`中的每个元素。`std::make_index_sequence<std::vector<int>::size_type>`生成了一个从0到`vec.size()-1`的序列。
注意,`std::vector<int>::size_type`是向量大小类型的别名,确保了我们不会越界访问。
阅读全文