【c++算法】变动性算法
生活随笔
收集整理的這篇文章主要介紹了
【c++算法】变动性算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
直接改變元素值,或者在復(fù)制到另一區(qū)間的過程中改變元素值
?
| For_each | 針對每個元素執(zhí)行某項操作 |
| Copy | 從第一個元素開始復(fù)制某段區(qū)間 |
| Copy_backward | 從最后一個元素開始復(fù)制某段區(qū)間 |
| Transform | 變動(并復(fù)制)元素,將兩個區(qū)間元素合并 |
| Merge | 合并兩個區(qū)間 |
| Swap_ranges | 交換區(qū)間內(nèi)的元素 |
| Fill | 以給定值替換每個元素 |
| Finn_n | 以給定值替換n個元素 |
| Generate | 以某項操作的結(jié)果替換每個元素 |
| Generate_n | 以某項操作的結(jié)果替換n個元素 |
| Replace | 將具有某特定值的元素替換為另一個值 |
| Replace_if | 將符合條件的元素替換為另一個值 |
| Replace_copy | 復(fù)制整個區(qū)間,同時將具有某特定值的元素替換為另一個值 |
| Replace_copy_if | 復(fù)制整個區(qū)間,同時將符合條件的元素替換為另一個值 |
#include?<vector>
#include?<algorithm>
#include?<iterator>
#include?<list>
using?namespace?std;
template<class?T>
class?FunctionObjectType
{
private:
????T?theValue;
public:
????FunctionObjectType(const?T&?v):theValue(v)
????{
????}
public:
????void?operator()(T?&i)
????{
????????i?+=?theValue;
????}
};
/*--------------打印元素-------------*/
template<class?T>
inline?void?PrintElements(const?T&?coll,const?char*?optcstr="")
{
????typename?T::const_iterator?pos;
????std::cout<<optcstr;
????for(pos=coll.begin();pos?!=?coll.end();?++pos)
????????std::cout<<*pos<<"?";
????std::cout<<std::endl;
}
template<class?T>
inline?void?PrintElementsPos(const?T&?coll,const?char*?optcstr="")
{
????typename?T::const_iterator?pos;
????std::cout<<optcstr;
????for(pos=coll.begin();pos?!=?coll.end();?++pos)
????????std::cout<<&*pos<<"?";
????std::cout<<std::endl;
}
/*--------------插入int型數(shù)據(jù)------------------*/
template<class?T>
inline?void?InsertElements(T&?coll,int?first,int?last)
{
????for(int?i?=?first;?i<=last;?++i)
????????coll.insert(coll.end(),i);
}
void?print(int?elem)
{
????std::cout<<?elem?<<?"?";
}
//for_each對每個元素執(zhí)行操作
void?Learn_for_each2()
{
????std::cout<<std::endl<<"--------------------in?Learn?for_each2()"<<endl;
????vector<int>?coll;
????InsertElements(coll,1,9);
????PrintElements(coll,"coll?:?");
????std::cout<<"每個元素與第一個元素求和"<<endl;
????for_each(coll.begin(),coll.end(),
????????????FunctionObjectType<int>(*coll.begin()));
????PrintElements(coll,"coll?:?");
????std::cout<<endl;
}
void?Learn_copy()
{
????std::cout<<std::endl<<"--------------------in?Learn?copy()?copy_backward()"<<endl;
????vector<int>?coll1;
????list<int>?coll2;
????InsertElements(coll1,1,9);
????PrintElements(coll1,"coll1?:?");
????std::cout<<"使用back_inserter把coll1拷貝到coll2"<<std::endl;
????copy(coll1.begin(),coll1.end(),back_inserter(coll2));
????PrintElements(coll2,"coll2?:?");
????coll2.clear();
????std::cout<<"使用front_inserter把coll1拷貝到coll2"<<std::endl;
????copy(coll1.begin(),coll1.end(),front_inserter(coll2));
????PrintElements(coll2,"coll2?:?");
????coll2.clear();
????std::cout<<"使用inserter把coll1拷貝到coll2,從第開始處插入"<<std::endl;
????copy(coll1.begin(),coll1.end(),inserter(coll2,coll2.begin()));
????PrintElements(coll2,"coll2?:?");
????//coll2.clear();
????std::cout<<"把coll1拷貝到coll2,從第二個元素開始覆蓋"<<std::endl;
????copy(coll1.begin(),coll1.end(),++coll2.begin());
????PrintElements(coll2,"coll2?:?");
????//coll2.clear();
????std::cout<<"使用ostream_iterator,cout"<<std::endl;
????copy(coll2.begin(),coll2.end(),ostream_iterator<int>(cout,"?"));
????std::cout<<std::endl;
????coll2.clear();
????vector<char>?source(10,'.');
????for(int?c='a';c<='f';c++)
????{
????????source.push_back(c);
????}
????source.insert(source.end(),10,'.');
????PrintElements(source,"source??:??");
????std::cout<<"從位置7開始copy"<<std::endl;
????vector<char>?c1(source.begin(),source.end());
????copy(c1.begin()+10,c1.begin()+16,c1.begin()+7);
????PrintElements(c1,"coll3??:??");
????std::cout<<"從位置7開始backward?copy"<<std::endl;
????vector<char>?c2(source.begin(),source.end());
????copy_backward(c2.begin()+10,c2.begin()+16,c2.begin()+7);
????PrintElements(c2,"coll3??:??");
}
void?Learn_transforming()
{
????std::cout<<std::endl<<"--------------------in?Learn?transforming()"<<endl;
????std::cout<<"復(fù)制修改元素一氣完成"<<endl;
????vector<int>?coll1;
????list<int>?coll2;
????InsertElements(coll1,1,9);
????PrintElements(coll1,"coll1?:?");
????std::cout<<"求反?:?"<<std::endl;
????transform(coll1.begin(),coll1.end(),coll1.begin(),negate<int>());
????PrintElements(coll1,"coll1?negate?:?");
????std::cout<<"10倍?:?"<<std::endl;
????transform(coll1.begin(),coll1.end(),
????????????????????back_inserter(coll2),
????????????????????bind2nd(multiplies<int>(),10));
????PrintElements(coll2,"coll2?bind2nd?:?");
????std::cout<<"求反?:?";
????transform(coll2.begin(),coll2.end(),
????????????????????ostream_iterator<int>(cout,"?"),
????????????????????negate<int>());
}
void?Learn_swap_ranges()
{
????std::cout<<std::endl<<"--------------------in?Learn?swap_ranges()"<<endl;
????vector<int>?coll1;
????list<int>?coll2;
????InsertElements(coll1,1,9);
????InsertElements(coll2,20,35);
????PrintElements(coll1,"coll1?:?");
????PrintElements(coll2,"coll2?:?");
????std::cout<<"交換?:?"<<std::endl;
????list<int>::iterator?pos;
????pos?=?swap_ranges(coll1.begin(),coll1.end(),coll2.begin());
????PrintElements(coll1,"coll1?:?");
????PrintElements(coll2,"coll2?:?");
????if(pos?!=?coll2.end())
????{
????????std::cout<<"第一個沒有交換的元素是:"<<*pos<<std::endl;
????}
????std::cout<<"第一個元素"<<*coll2.begin()?<<"和最后一個元素"<<*coll2.rbegin()<<"互換:"<<std::endl;
????swap_ranges(coll2.begin(),++coll2.begin(),coll2.rbegin());
????PrintElements(coll2,"coll2?:?");
}
void?Learn_fill()
{
????std::cout<<std::endl<<"--------------------in?Learn?fill()?fill_n()"<<endl;
????list<string>?coll;
????std::cout<<"填充10次‘hello’?:?"<<std::endl;
????fill_n(back_inserter(coll),10,"hello");
????PrintElements(coll,"coll?:?");
????std::cout<<"coll用world填充?:?"<<std::endl;
????fill(coll.begin(),coll.end(),"world");
????PrintElements(coll,"coll?:?");
????std::cout<<"填充8次‘hello’?:?"<<std::endl;
????fill_n(coll.begin(),8,"hello");
????PrintElements(coll,"coll?:?");
}
void?Learn_generate()
{
????std::cout<<std::endl<<"--------------------in?Learn?generate()?generate_n()"<<endl;
????list<int>?coll;
????std::cout<<"賦值?10次隨機值?:?"<<std::endl;
????generate_n(back_inserter(coll),10,rand);
????PrintElements(coll,"coll?:?");
????std::cout<<"賦隨機值?:?"<<std::endl;
????generate(coll.begin(),coll.end(),rand);
????PrintElements(coll,"coll?:?");
}
void?Learn_replace()
{
????std::cout<<std::endl<<"--------------------in?Learn?replace()?replace_if()?replace_copy()?replace_copy_if()"<<endl;
????list<int>?coll;
????list<int>?coll2;
????InsertElements(coll,2,7);
????InsertElements(coll,5,9);
????PrintElements(coll,"coll?:?");
????std::cout<<"值為6的元素替換為1:?"<<std::endl;
????replace(coll.begin(),coll.end(),
????????????????6,
????????????????1);
????PrintElements(coll,"coll?:?");
????std::cout<<"小于5的元素替換為0:?"<<std::endl;
????replace_if(coll.begin(),coll.end(),
????????????????????bind2nd(less<int>(),5),
????????????????????0);
????PrintElements(coll,"coll?:?");
????std::cout<<"拷貝coll到coll2,拷貝過程中把5替換為55:?"<<std::endl;
????replace_copy(coll.begin(),coll.end(),
????????????????????back_inserter(coll2),
????????????????????5,
????????????????????55);
????PrintElements(coll,"coll?:?");
????PrintElements(coll2,"coll2?:?");
????std::cout<<"拷貝coll到coll2,拷貝過程中把小于5的替換為11:?"<<std::endl;
????replace_copy_if(coll.begin(),coll.end(),
????????????????????back_inserter(coll2),
????????????????????bind2nd(less<int>(),5),
????????????????????11);
????PrintElements(coll,"coll?:?");
????PrintElements(coll2,"coll2?:?");
}
int?main()
{
????cout<<"hello?world"<<endl;
????//--------------------變動性算法--------begin
????Learn_for_each2();
????Learn_copy();
????Learn_transforming();
????Learn_swap_ranges();
????Learn_fill();
????Learn_generate();
????Learn_replace();
????//cin.get();
????return?0;
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/ningth/archive/2012/02/20/2359426.html
總結(jié)
以上是生活随笔為你收集整理的【c++算法】变动性算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25 个超棒的 WordPress 主题
- 下一篇: iscroll.js 触屏手机web-k