测试代码如下:
#include <iostream>
#include <vector>
#include <iterator>
#include <istream>
using namespace std;
struct maxInfo
{
int start;
int end;
int max;
};
void maxValue(vector<int> data, maxInfo &mi)
{
int max, sum;
max = sum = data[0];
mi.start = mi.end = 0;
for (int i = 1; i < data.size(); i++) {
if (data[i] >= 0) {
if (sum > 0) {
mi.end = i;
sum += data[i];
}
else {
mi.start = mi.end = i;
sum = data[i];
}
max = std::max(sum, max);
}
else {
sum += data[i];
}
}
mi.max = max;
}
int main()
{
maxInfo mi;
cout << "Input the datas : " ;
istream_iterator<int> begin(cin), end;
vector<int> vc(begin, end);
maxValue(vc, mi);
cout << "[ " << mi.start << ", " << mi.end << " ]" << endl;
cout << "Max value is: " << mi.max <<endl;
cout << "Sub array is : " <<endl;
copy(vc.begin() + mi.start, vc.begin() + mi.end + 1, ostream_iterator<int> (cout, " "));
return 0;
}