使用STL算法重写的指针循环示例,没有循环?

Ber*_*nie 5 c++ algorithm loops for-loop stl

我如何重写下面的代码,例如,使用没有循环的STL算法?

vector<double> pizzaBox;
int biggestSlice = 0;
for (int* p = &pizzaBox[0]; p != pizzaBox[pizzaBox.size()]; p++) {
    if(*p > biggestSlice)
        biggestSlice = *p;
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 14

假设你真正意味着vector<int>,在纠正你的循环结束条件后,你可以在max_element这里使用算法:

int biggestSlice = *max_element(pizzaBox.begin(), pizzaBox.end());
Run Code Online (Sandbox Code Playgroud)

(注意,max_element返回一个迭代器,因此我在分配之前取消引用返回值biggestSlice.)

当向量为空时,这当然不再有效(=产生未定义的行为).取消引用函数的返回值之前,需要显式测试.

  • `if(!pizzaBox.empty())`,但是提问者的代码有同样的问题. (5认同)
  • @Steve Jessop:即使使用非空向量,OP问题也存在问题. (2认同)