C++ 如何在c++;?

C++ 如何在c++;?,c++,c++11,vector,stl,C++,C++11,Vector,Stl,请看一下下面的代码。我尝试使用max_element函数和find函数来完成任务,但编译时显示分段错误。我已经检查过了,没有越界。请帮助我,如果可能的话,请给我一些C++的资源,我知道BADICS,我在STL部分有困难。 #include<iostream> #include<vector> #include<algorithm> using namespace std; double bag( int w, vector<int> values,

请看一下下面的代码。我尝试使用max_element函数和find函数来完成任务,但编译时显示分段错误。我已经检查过了,没有越界。请帮助我,如果可能的话,请给我一些C++的资源,我知道BADICS,我在STL部分有困难。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
double bag( int w, vector<int> values,vector<int> weights){
    int index, ma;
    double W1=0.0;
    double V=0.0;
    while(W1<=w)
    {
ma=*max_element(values.begin(), values.end())   ;
auto it = find(values.begin(), values.end(), ma);
index = distance(values.begin(),it);

if(w-W1>=weights[index])
{
V=V+values[index];
W1=W1+weights[index];
}

else 
{
    V=V+values[index]*(w-W1)/weights[index];
    }
    
    values.erase(it);
    weights.erase(it);
    }
    return V;
}
int main() {
  int n;
  int w;
  double ans;
  std::cin >> n >> w;
  vector<int> values(n);
  vector<int> weights(n);
  for (int i = 0; i < n; i++) {
    std::cin >> values[i] >> weights[i];
  }
    cout<<values[n-1];
    ans = bag(w,values,weights);
    cout<<ans;
} 
#包括
#包括
#包括
使用名称空间std;
双包(整数w、向量值、向量权重){
int指数,ma;
双W1=0.0;
双V=0.0;
而(W1=权重[指数])
{
V=V+值[索引];
W1=W1+权重[指数];
}
其他的
{
V=V+值[指数]*(w-W1)/权重[指数];
}
删除(它);
删除(它);
}
返回V;
}
int main(){
int n;
int w;
双ans;
标准:cin>>n>>w;
向量值(n);
向量权重(n);
对于(int i=0;i>值[i]>>权重[i];
}
cout您正在“取消引用”从
max\u元素返回的内容,而不检查它是否为
values.end()
,不能“取消引用”

循环条件
while(W1
values.erase(it);
weights.erase(it);
weights.erase(std::next(weights.begin(), std::distance(values.begin(), it)));
values.erase(it);