Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <string>
- #include <iostream>
- struct B {
- B() {}
- std::string str() const { return "B" + std::to_string(y); }
- int y;
- };
- struct A {
- A(int a) { x = a; }
- operator B () const { B b; b.y = x; return b; }
- std::string str() const { return "A" + std::to_string(x); }
- int x;
- };
- struct intvector : std::vector<int> {
- using base = std::vector<int>; using base::base; //< using-declarations don't like template syntax
- operator std::vector<A>() const {
- std::vector<A> rtn(this->begin(), this->end());
- return rtn;
- }
- operator std::vector<B>() const {
- std::vector<B> rtn(size()); // or rtn.reserve(size());
- for (size_t i = 0; i < size(); ++i) rtn[i].y = at(i);
- return rtn;
- }
- };
- struct avector : std::vector<A> {
- using base = std::vector<A>; using base::base; //< using-declarations don't like template syntax
- avector(const std::initializer_list<int>& ints) { for (int i : ints) push_back(i); }
- avector(const intvector& ints) { for (int i : ints) push_back(i); }
- operator std::vector<B>() const {
- std::vector<B> rtn(begin(), end());
- // std::vector<B> rtn(size()); // or rtn.reserve(size());
- // for (size_t i = 0; i < size(); ++i) rtn[i] = at(i);
- return rtn;
- }
- };
- int main() {
- intvector vec = {1,2,3,4,5};
- std::vector<A> avec = vec;
- for (const A& a : avec) std::cout << a.str() << std::endl;
- std::vector<B> bvec = vec;
- for (const B& b : bvec) std::cout << b.str() << std::endl;
- avector avec2 = vec;
- std::vector<B> bvec2 = avec2;
- for (const B& b : bvec) std::cout << b.str() << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement