典型的求最大子數組和的問題,在前面的一篇文章中已經討論過這個演算法了.STL標準庫為我們提供了一個更好操作的模版---vector, 相比數組, vector具有可動態增長的特點,不像數組一旦定義,空間就已經固定不變了。與我們可以用指標訪問數組一樣,我們使用迭代器(一種資料類型)來訪問容器內的元素。所以A掉這個題目並不難,下面就是ac代碼
#include <iostream>#include <vector>using namespace std;using std::vector;int Max_SubArray(vector<int>::iterator pia,int len,int *start_script,int *end_script) {int max_sum=0; int i,flag=0; int temp_sum=0; int start=0,end;for(i = 0;i != len;++i){ if(temp_sum < 0) { temp_sum=pia[i]; end=i;start=i;}else { temp_sum += pia[i]; end=i; } if(temp_sum > max_sum) {max_sum=temp_sum; *start_script=start; *end_script=end; } }if(max_sum==0) { max_sum=pia[0]; *start_script=0;*end_script=0; for(i = 0;i != len;++i) { if(pia[i] > max_sum) { max_sum=pia[i]; *start_script=i;*end_script=i; } } } return max_sum;}int main(){int ival; int len,n,ai; int start,end;int re,i,count=0,flag;cin>>n;flag=n;while(n--){count++;vector<int> ivec;start=0;end=0;re=0;cin>>ival;for(i=0;i<ival;i++){cin >> ai;ivec.push_back(ai);}len=ivec.size();vector<int>::iterator iter = ivec.begin();//定義了一個迭代器類型變數iter,並且初始化指向ivec容器第一個元素re=Max_SubArray(iter,len,&start,&end);//s,l以引用的形式傳入函數,函數處理後返回相應值cout<<"Case "<<count<<":"<<endl;cout<<re<<" "<<start+1<<" "<<end+1<<endl;if(count != flag)cout<<endl;}return 0;}