📅  最后修改于: 2023-12-03 14:52:15.193000             🧑  作者: Mango
在 C++ 中,向量可以被看作一个动态数组,当我们需要类似于 Python 中的切片操作时,我们可以通过使用 STL 的 std::vector
类型实现。
首先,我们需要定义一个函数来进行切片操作,该函数接受一个向量对象和两个整数参数:一个起始下标和一个结束下标。
#include <iostream>
#include <vector>
template <typename T>
std::vector<T> slice(std::vector<T> const& v, int start, int end) {
auto first = v.begin() + start;
auto last = v.begin() + end + 1;
std::vector<T> vec(first, last);
return vec;
}
int main() {
std::vector<int> v = { 1, 2, 3, 4, 5 };
std::vector<int> sliced_v = slice(v, 1, 3);
for (auto const& elem : sliced_v) {
std::cout << elem << " ";
}
return 0;
}
输出结果应该为:
2 3 4
这个函数使用了 STL 中的 std::vector
类型和迭代器,来实现类似于 Python 中的切片功能。
在函数中,我们首先在传递的向量对象 v 的开始位置上加上一个起始下标参数 start,已移动迭代器 first 到需要开始切片的元素位置;同理,在结束位置上加上一个结束下标参数 end,得到迭代器 last。
然后,我们用迭代器 first 和 last 构造一个新的向量对象,并返回它。
在 C++ 中,向量的切片可以通过使用 STL 中的 std::vector
类型和迭代器来实现。通过定义一个切片函数,我们可以方便地对向量进行切片操作,避免手动编写复杂的循环结构。
代码片段见下:
```c++
#include <iostream>
#include <vector>
template <typename T>
std::vector<T> slice(std::vector<T> const& v, int start, int end) {
auto first = v.begin() + start;
auto last = v.begin() + end + 1;
std::vector<T> vec(first, last);
return vec;
}
int main() {
std::vector<int> v = { 1, 2, 3, 4, 5 };
std::vector<int> sliced_v = slice(v, 1, 3);
for (auto const& elem : sliced_v) {
std::cout << elem << " ";
}
return 0;
}