10.11
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
void println(const std::vector<std::string> & vs) {
for (auto a : vs) {
std::cout << a << " ";
}
std::cout << std::endl;
}
bool
is_shorter(std::string const& lhs, std::string const& rhs)
{
return lhs.size() < rhs.size();
}
void elimDups(std::vector<std::string> &vs)
{
std::sort(vs.begin(), vs.end());
println(vs);
auto new_end = std::unique(vs.begin(), vs.end());
println(vs);
vs.erase(new_end, vs.end());
}
int main()
{
std::vector<std::string> vs{ "1234", "2234", "3234", "123", "223", "333", "11","12" ,"1234"};
println(vs);
elimDups(vs);
std::stable_sort(vs.begin(), vs.end(), is_shorter);
println(vs);
return 0;
}
10.12
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include "Sales_data.h"
bool compareIsbn(const Sales_data &sd1, const Sales_data &sd2)
{
return sd1.isbn().size() < sd2.isbn().size();
}
int main()
{
Sales_data d1("aa"), d2("aaaa"), d3("aaa"), d4("z"), d5("aaaaz");
std::vector<Sales_data> v{ d1, d2, d3, d4, d5 };
std::sort(v.begin(), v.end(), compareIsbn);
for(const auto &element : v)
std::cout << element.isbn() << " ";
std::cout << std::endl;
return 0;
}
10.13
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
bool predicate(const std::string &s)
{
return s.size() >= 5;
}
int main()
{
auto v = std::vector<std::string>{ "a", "as", "aasss", "aaaaassaa", "aaaaaabba", "aaa" };
auto pivot = std::partition(v.begin(), v.end(), predicate);
for (auto it = v.cbegin(); it != pivot; ++it)
std::cout << *it << " ";
std::cout << std::endl;
return 0;
}