10.1
10.2
10.3
10.4
第三个参数的类型决定了使用那种类型的运算符,当前例子中,容器元素类型为double,而第三参数类型为int,运算accumulate时候虽然编译器不会报错,但是会导致小数部分丢失
10.5
结果不会受到影响,容器类型只要能用==来比较即可
10.6
10.7
a.使用copy时,拷贝容器大小必须要大于等于被拷贝容器
int main(){ vector<int > vec_0 ; list<int > list_0; for(int i = 0 ; i != 10; i++){ vec_0.push_back(i); } list_0.resize(vec_0.size()); copy(vec_0.cbegin(), vec_0.cend(), list_0.begin()); for(auto tmpInt : list_0){ cout << tmpInt<<endl; } for (;;); return 0; }
b.fill_n某个容器时,容器的大小必须大于等于fill_n,否则会造成越界操作,而reserve只是分配了容器的可分配大小,并没有实质改变容器的具体大小所以会报错,修改如下
int main(){ vector<int > vec_0 ; vec_0.resize(10); fill_n(vec_0.begin(),10,1); for(auto tmpInt : vec_0){ cout << tmpInt << endl; } for (;;); return 0; }
10.8
back_inserter返回的是插入迭代器,对迭代器进行赋值后实际的操作是push_back,所以不会发生断言失效
10.9
void elimDups(vector<int >& vecInt){ sort(vecInt.begin(), vecInt.end()); vector<int >::iterator tmpIt = unique(vecInt.begin(), vecInt.end()); vecInt.erase(tmpIt, vecInt.end()); } int main(){ vector<int > vec = {0,1,5,1,2,6,5,1,2,3,5,6,1} ; elimDups(vec); for(auto tmpInt : vec){ cout << tmpInt << endl; } for (;;); return 0; }
10.10
因为算法使用的是迭代器操作,但是迭代器插入或删除既改变容器大小后会导致迭代器失效,所以算法不能改变容器大小
10.11
10.12
略
10.13
int isCondition(const string& s1) { return s1.size() >= 5; } void checkStringSize(vector<string >& vecStr){ vector<string >::iterator it = partition(vecStr.begin(), vecStr.end(), isCondition); for(auto vecIt = vecStr.begin(); vecIt!=it; vecIt++){ cout << *vecIt<< endl; } } int main(){ vector<string > vec = {"123","12345","12","123456","123456789"} ; checkStringSize(vec); for (;;); return 0; }
10.14:
[](const int & i1, const int & i2){ return i1+ i2; };
10.15
int size = 0; [size](const int & i1) { return i1 + size; };
10.16
void biggies(vector<string >& vecStr, const vector<string>::size_type& sz){ stable_sort(vecStr.begin(), vecStr.end(), [](const string& s1, const string& s2) {return s1.size() < s2.size(); }); elimDups(vecStr); vector<string>::iterator it = find_if(vecStr.begin(), vecStr.end(), [sz](const string& s1){return s1.size() >= sz;}); for_each(it, vecStr.end(), [](const string& s1) { cout << s1 << endl; }); } int main(){ vector<string > vecStr = {"12","123","12345", "12345689","123","12"}; biggies(vecStr,3); for (;;); return 0; }
10.17
略
10.18
void biggies(vector<string >& vecStr, const vector<string>::size_type& sz){ elimDups(vecStr); vector<string>::iterator it = partition(vecStr.begin(), vecStr.end(), [sz](const string& s1){return s1.size() >= sz;}); for_each(vecStr.begin(), it, [](const string& s1) { cout << s1 << endl; }); } int main(){ vector<string > vecStr = {"12","123","12345", "12345689","123","12"}; biggies(vecStr,3); for (;;); return 0; }
10.19
void biggies(vector<string >& vecStr, const vector<string>::size_type& sz){ elimDups(vecStr); vector<string>::iterator it = stable_partition(vecStr.begin(), vecStr.end(), [sz](const string& s1){return s1.size() >= sz;}); for_each(vecStr.begin(), it, [](const string& s1) { cout << s1 << endl; }); } int main(){ vector<string > vecStr = {"12","123","12345", "12345689","123","12"}; biggies(vecStr,3); for (;;); return 0; }
10.20
int main(){ vector<string >vec = {"123","1234","123","123456","123456789","123456798"}; cout << count_if(vec.begin(),vec.end(),[](const string& s1){return s1.size() > 6;})<<endl; for (;;); return 0; }
10.21
int main(){ int theCountDown = 10; auto theCheckFunc = [&theCountDown]()->bool { if (theCountDown) { return true; } else { return false; }}; while (theCheckFunc()) { --theCountDown; } cout << theCountDown << endl; for (;;); return 0; }
10.22
bool isCondition(const string& s1) { return s1.size() <= 5; } int main(){ vector<string >vec = { "123","1234","123","123456","123456789","123456798" }; elimDups(vec); vector<string>::iterator it = partition(vec.begin(), vec.end(), isCondition); for_each(vec.begin(), it, [](const string& s1){cout <<s1<<endl; }); for (;;); return 0; }
10.23
根据占位符数量及列表数量来确定bind的参数数量
10.24
bool check_size(const int& val, const string& s1){ return val >= s1.size(); } int main(){ vector<int > vecInt = {1,2,3,4,5,6,7,8,9}; string theStr = "1234"; auto bindFunc = bind(check_size, _1, theStr); cout << *find_if(vecInt.begin(), vecInt.end(), bindFunc) << endl; for (;;); return 0; }
10.25
bool check_size(const string& s1, const int& val) { return s1.size() >= val; } void biggiesWithBind(vector<string >& vecStr, const vector<string>::size_type& sz) { elimDups(vecStr); auto bindFunc = bind(check_size, _1, sz); vector<string>::iterator it = partition(vecStr.begin(), vecStr.end(), bindFunc); for_each(vecStr.begin(), it, [](const string& s1) { cout << s1 << endl; }); } int main(){ vector<string >vec = { "123","1234","123","123456","123456789","123456798" }; biggiesWithBind(vec, 5); for (;;); return 0; }