vector的rbegin和begin有什么区别
时间: 2024-06-11 18:08:25 浏览: 181
vector的rbegin和begin是两个迭代器,它们的区别在于:
1. begin返回vector的第一个元素的迭代器,而rbegin返回vector的最后一个元素的迭代器。
2. begin返回的迭代器是正向迭代器,可以用来从头到尾遍历vector中的元素,而rbegin返回的迭代器是反向迭代器,可以用来从尾到头遍历vector中的元素。
3. 通过begin和rbegin可以遍历vector中的所有元素,但是它们的遍历方向不同,需要根据实际需要选择使用哪个迭代器。
总之,begin和rbegin都是用来访问vector中元素的迭代器,区别在于它们的遍历方向不同。
相关问题
vector中的rbegin
`rbegin()`是C++ STL中vector容器的一个成员函数,它返回一个指向vector末尾元素的反向迭代器,即反向的begin迭代器,也就是该向量的最后一个元素的迭代器。这个函数可以用来对vector进行反向操作。例如,可以使用`rbegin()`和`rend()`函数来反向遍历vector中的元素。需要注意的是,只有在vector非空时,`rbegin()`函数才是有效的,否则会导致未定义的行为。
#include <iostream> #include<vector> #include<algorithm> using namespace std; class mycompare { public: bool operator()(int s1, int s2) { return s1 <s2; } }; int main() { mycompare mycompare1; int n, m, c,i; vector<int> v1, v2; cout << "作业个数为:"; cin >> n; cout << "作业时间依次为:" <<endl; for (i = 0; i < n; i++) { cin >>c; v1.push_back(c); } sort(v1.begin(), v1.end(), mycompare1);//作业时间降序排序 cout <<"处理机个数为:"; cin >> m; for (i = 0; i < m; i++) v2.push_back(0); for (i = 0; i <n; i++) { sort(v2.begin(), v2.end());//处理机完成作业时间升序排列 v2[0] += v1[i];//将作业分配给最先空闲的处理机,并将处理机完成作业时间加上相应作业时间 } cout <<"最短处理机时间为:" <<*v2.rbegin()<<endl; return 0; }此代码的时间复杂度和空间复杂度
这段代码的时间复杂度为 O(nlogn),其中 n 为作业个数。这是由于代码中使用了 STL 中的 sort 函数对作业时间进行了降序排序,时间复杂度为 O(nlogn),而后面的循环中对处理机完成作业时间进行了升序排序,时间复杂度为 O(mlogm),m 为处理机个数,但是由于 m 远小于 n,因此可以忽略不计。接着,循环中的分配作业的操作,时间复杂度为 O(nlogm),最坏情况下,需要将 n 个作业分配到 m 个处理机中,因此需要进行 n 次分配操作,每次操作都需要对 m 个处理机完成作业时间进行排序,时间复杂度为 O(mlogm),因此总的时间复杂度为 O(nlogn + nlogm)。
这段代码的空间复杂度为 O(n + m),其中 n 为作业个数,m 为处理机个数。这是由于代码中使用了 STL 中的 vector 来存储作业时间和处理机完成作业时间,因此需要分别开辟 n 和 m 个空间来存储这些数据。此外,由于只使用了常数个变量,因此不会对空间复杂度产生影响。
阅读全文