#include #include #include #include #include struct Is_Positive { bool check(int const& value) { return value > 0; } }; class Has_Length { public: Has_Length(int size) : size { size } { } bool check(std::string const& str) { return str.size() >= size; } private: int size; }; class Constrained_Container { public: using Condition = Is_Positive; using value_type = int; Constrained_Container(Condition condition) : condition { condition } { } bool insert(value_type value) { if (condition.check(value)) { container.insert(container.end(), value); return true; } return false; } value_type const& get(unsigned index) const { return *(std::next(container.begin(), index)); } unsigned size() const { return container.size(); } private: Condition condition; std::vector container; }; int main() { // Skriv om detta testfall så att det fungerar för din kod std::cout << "==== vector:" << std::endl; { // Ska skriva ut: 9 3 4 Is_Positive condition; Constrained_Container v { condition }; v.insert(-5); v.insert(0); v.insert(-1); v.insert(9); v.insert(3); v.insert(-2); v.insert(4); for (unsigned i { 0 }; i < v.size(); ++i) { std::cout << v.get(i) << " "; } std::cout << std::endl; } /* För G och VG std::cout << "==== set:" << std::endl; { // Ska skriva ut: framfor typename value_type Has_Length condition { 4 }; Constrained_Container, Has_Length> s { condition }; s.insert("value_type"); s.insert("ska"); s.insert("ha"); s.insert("typename"); s.insert("framfor"); for (unsigned i { 0 }; i < s.size(); ++i) { std::cout << s.get(i) << " "; } std::cout << std::endl; } */ /* För VG std::cout << "vector till set:" << std::endl; { // Ska skriva ut: 0.5 2.3 std::vector values { -4.5, 2.3, -1.2, 0.5 }; Is_Positive condition { }; Constrained_Container, Is_Positive> s { values.begin(), values.end(), condition }; for (unsigned i { 0 }; i < s.size(); ++i) { std::cout << s.get(i) << " "; } std::cout << std::endl; } */ }