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;
}