vector<int>(res.rbegin(), res.rend())
时间: 2024-05-20 10:13:12 浏览: 14
这是一个将vector容器中元素反转的方法。
其中,`rbegin()`返回一个指向vector容器末尾的反向迭代器,`rend()`返回一个指向vector容器起始位置前一个元素的反向迭代器。
在这里,`vector<int>(res.rbegin(), res.rend())`使用了vector的构造函数,将迭代器从末尾到起始位置的元素复制到一个新的vector中,并返回这个新的vector,达到反转vector的目的。
相关问题
error: no match for ‘operator!=’ (operand types are ‘std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >}’ and ‘std::vector<int>::reverse_iterator {aka std::reverse_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> > >}’)
这个错误提示意味着你在使用不同类型的迭代器进行比较,导致编译器无法找到对应的操作符。std::vector<int>::iterator 是正向迭代器,而std::vector<int>::reverse_iterator 是反向迭代器,它们的底层实现是不同的。
如果你需要比较两个不同类型的迭代器,可以将其中一个迭代器转换为另一个类型的迭代器。例如,你可以使用 std::reverse_iterator 来将正向迭代器转换为反向迭代器,或者使用 base() 函数将反向迭代器转换为正向迭代器。以下是一个示例:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
auto itr = vec.begin();
auto ritr = vec.rbegin();
if (itr != ritr.base()) {
// do something
}
```
在上面的代码中,我们使用 ritr.base() 将反向迭代器转换为正向迭代器进行比较。
vector<double> KnapsackFractional(int W, vector<int>& wt, vector<int>& val, int n) { vector<pair<double, int>> vw(n); for (int i = 0; i < n; i++) { vw[i] = { val[i] * 1.0 / wt[i], i }; } sort(vw.rbegin(), vw.rend()); vector<double> res(n, 0.0); double w = 0.0; for (int i = 0; i < n; i++) { if (w + wt[vw[i].second] <= W) { res[vw[i].second] = 1.0; w += wt[vw[i].second]; } else { double r = (W - w) * 1.0 / wt[vw[i].second]; res[vw[i].second] = r; w += r * wt[vw[i].second]; break; } } return res; } int main() { int W = 4; vector<int> wt = { 10, 20, 30 ,40}; vector<int> val = { 60, 10, 16 ,101}; int n = wt.size(); vector<double> res = KnapsackFractional(W, wt, val, n); cout << "装入物品的对应指示向量为:"; for (int i = 0; i < res.size(); i++) { cout << res[i] << " "; } cout << endl; return 0; }流程图
抱歉,我无法呈现流程图,但我可以为您解释一下该代码的流程:
1. 首先将每个物品的价值和重量的比值存入一个 pair 中,并按照比值从大到小排序,用于后面选择物品。
2. 初始化一个长度为 n 的 double 类型数组 res,并将其所有元素赋值为 0.0。
3. 初始化一个当前背包重量 w,开始遍历每个物品。
4. 如果当前背包重量加上该物品的重量小于等于背包容量 W,则将该物品全部装入背包,将 res 数组对应位置赋值为 1.0。
5. 如果当前背包重量加上该物品的重量大于背包容量 W,则只能装入该物品的一部分,计算出装入该物品的最大比例 r,将 res 数组对应位置赋值为 r。
6. 将背包重量加上装入该物品的重量乘以比例 r。
7. 结束遍历后,返回 res 数组作为装入物品的对应指示向量。