我想知道使用rbegin()而不是end() - 1对STL容器有什么好处.
例如,为什么你会使用类似的东西:
vector<int> v;
v.push_back(999);
vector<int>::reverse_iterator r = v.rbegin();
vector<int>::iterator i = r.base();
Run Code Online (Sandbox Code Playgroud)
而不是:
vector<int> v;
v.push_back(999);
auto r = v.end() - 1;
Run Code Online (Sandbox Code Playgroud) 我正在学习向量,并对数组如何在这里复制到向量感到困惑
double p[] = {1, 2, 3, 4, 5};
std::vector<double> a(p, p+5);
Run Code Online (Sandbox Code Playgroud)
我也知道std::vector<double> a(3,5);`为3腾出空间并用5初始化它们.上面的代码如何工作?
第二点是我从我复制上述代码的地方读到的段落.
在使用矢量或任何其他标准容器时,理解第二点至关重要.受控序列始终以[first,one-last-last]表示 - 不仅适用于ctors,还适用于对一系列元素进行操作的每个函数.
我不知道是什么意思[first, one-past-last)?我在数学上知道,但不知道为什么/如何以这种方式复制数组?
编辑
另一个相关问题
成员函数
end()返回一个迭代器,该迭代器one-past-the-last-element在序列中"指向" .请注意,取消引用返回的迭代器end()是非法的,并且具有未定义的结果.
你能解释one-past-the-last-element一下它是什么吗?为什么?