#ifndef FUNCTION_10_H_
#define FUNCTION_10_H_
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
#include<forward_list>
#include<deque>
#include<array>
#include<string>
#include<fstream>
#include<numeric>
using namespace std;
void function_10_1(int b)
{
vector<int> temp;
for(int i=0;i<10;i++)
{
temp.push_back(i);
}
size_t a = count(temp.cbegin(),temp.cend(),b);
cout<<a<<endl;
}
void function_10_3(void)
{
vector<double> temp;
for(double i=0.1;i<10;i++)
{
temp.push_back(i);
cout<<i<<endl;
}
double a = accumulate(temp.cbegin(),temp.cend(),0.0);
cout<<a<<endl;
}
/*10_4
有错误,应该是初始值0和和V的元素类型不匹配。
在计算时,由于初始值是int,所以accumulate函数,先将double类型元素转化为int,
即舍去小数点后的部分,再加到初始值int上。
*/
void function_10_5(void)
{
vector<const char*> s1;
vector<const char*> s2;
char* a1="asdfg"; char* a2="asdfg";s1.push_back(a1);s2.push_back(a2);
char* b="qwer";s1.push_back(b);s2.push_back(b);
char* c="vbnm";s1.push_back(c);s2.push_back(c);
if(equal(s1.cbegin(),s1.cend(),s2.cbegin()))
{
cout<<"ture"<<endl;
}
else
{
cout<<"false"<<endl;
}
}
void function_10_6(void)
{
vector<int> a;
fill_n(back_inserter(a),10,0);
for(vector<int>::size_type i =0;i<a.size();i++)
{
cout<<a[i]<<" ";
}
}
void function_10_7(void)
{
vector<int> vec;
list<int> lst;
int i;
while (cin>>i)
{
lst.push_back(i);
}
vec.resize(lst.size());
for(vector<int>::size_type i =0;i< vec.size();i++)
{
cout<<vec[i]<<" ";
}
cout<<endl;
copy(lst.cbegin(),lst.cend(),vec.begin());
for(vector<int>::size_type i =0;i< vec.size();i++)
{
cout<<vec[i]<<" ";
}
cout<<endl;
vector<int> vec2;
vec2.reserve(10);
for(vector<int>::size_type i =0;i< vec2.size();i++)
{
cout<<vec2[i]<<" ";
}
cout<<endl;
fill_n(vec2.begin(),10,0);
for(vector<int>::size_type i =0;i< vec2.size();i++)
{
cout<<vec2[i]<<" ";
}
}
/*10_8
back_inserter调用push_back
目前猜测,back_inserter先调用push_back在尾后插入一个默认值的元素,然后back_inserter指向这个元素的位置,
再解引用赋值,即使容量改变,也是容器根据自己的size和capacity自行扩容的。
摘自CSDN:
插入迭代器是一种适配器,back_insert_iterator必须作用于支持push_back的容器,front_insert_iterator必须
作用于支持push_front的容器,仅仅是对这两个方法的封装。所以最好把它们和普通的容器迭代器区分开来。那为什么
要把push_back和push_front进行封装呢?原因有两个,一是用着更方便,二是扩充了迭代器的能力,因为容器的迭代
器最高也就是随机访问的能力,但是你不能通过迭代器扩充容器。
*/
void function_10_9(void)
{
vector<string> txt;
string word;
while (getline(cin,word))
{
txt.push_back(word);
}
sort(txt.begin(),txt.end());
auto poi = unique(txt.begin(),txt.end());
txt.erase(poi,txt.end());
for(vector<string>::size_type i =0; i<txt.size(); i++)
{
cout<<txt[i]<<" ";
}
}
#endif