Tel*_*ope 2 c++ stdvector c++20 std-span
我有一个带有成员变量的类std::vector。我还有一个成员函数,它采用std::vector由两个size_t参数指定的连续范围,并对其执行一些操作。
class MyClass {
std::vector<int> objects;
public:
void func(size_t start_index, size_t end_index);
}
Run Code Online (Sandbox Code Playgroud)
现在,我想size_t用单个参数替换两个std::span参数,以提高安全性、可读性和可维护性。然而,有一个障碍:在我的函数中,我需要能够恢复原始std::vector. 就像这样,我需要能够找到std::span原始数组中的开始位置。有没有办法做到这一点?如果没有,那么我是否别无选择,只能使用我原来笨重的设计?
objects.begin()(我最初尝试通过从我拥有的参数begin()的迭代器中减去来恢复第一个索引std::span,但这导致了编译错误。)
如果您有可用的原始向量,则跨度中第一个元素的向量中的索引为
auto index = (span.data() - vector.data());
Run Code Online (Sandbox Code Playgroud)
objects.begin()(我最初尝试通过从我拥有的参数begin()的迭代器中减去来恢复第一个索引std::span,但这导致了编译错误。)
那是行不通的。您无法减去或获取来自不同容器的两个迭代器之间的差异。data另一方面,它们是指向同一数组的指针,您可以了解它们的差异。