Skip to main content
Loading...

More C++ Posts

#include <iostream>
#include "PlaylistNode.h"
using namespace std;
void PrintMenu(string title);

int main() {
   string plTitle;
   cout << "Enter playlist's title:" << endl;
   getline(cin, plTitle);
   PrintMenu(plTitle);
   return 0;
}

void PrintMenu(string title) {
   Playlist list;
   string id;
   string sname;
   string aname;
   int length;
   int oldPos;
   int newPos;
   char choice;
   
   while(true) {
      cout << endl << title << " PLAYLIST MENU" << endl;
      cout << "a - Add song" << endl;
      cout << "d - Remove song" << endl;
      cout << "c - Change position of song" << endl;
      cout << "s - Output songs by specific artist" << endl;
      cout << "t - Output total time of playlist (in seconds)" << endl;
      cout << "o - Output full playlist" << endl;
      cout << "q - Quit" << endl << endl;
      
      cout << "Choose an option:" << endl;
      cin >> choice;
      cin.ignore();
      
      if (choice == 'q') {
         exit(1);
      }
      else if (choice == 'a') {
         cout << "\nADD SONG" << endl;
         cout << "Enter song's unique ID: ";
         cin >> id;
         cin.ignore();
         cout << "Enter song's name: ";
         getline(cin,sname);
         cout << "Enter artist's name: ";
         getline(cin,aname);
         cout << "Enter song's length (in seconds): ";
         cin >> length;
         list.AddSong(id, sname, aname, length);
      }
      else if (choice == 'd') {
         cout << "\nREMOVE SONG" << endl;
         cout << "Enter song's unique ID: ";
         cin >> id;
         list.RemoveSong(id);
      }
      else if (choice == 'c') {
         cout << "\nCHANGE POSITION OF SONG" << endl;
         cout << "Enter song's current position: ";
         cin >> oldPos;
         cout << "Enter new position for song: ";
         cin >> newPos;
         list.ChangePosition(oldPos, newPos);
      }
      else if (choice == 's') {
         cout << "\nOUTPUT SONGS BY SPECIFIC ARTIST" << endl;
         cout << "Enter artist's name: ";
         getline(cin, aname);
         list.SongsByArtist(aname);
      }
      else if (choice == 't') {
         cout << "\nOUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)" << endl;
         cout << "Total time: " << list.TotalTime() << " seconds" << endl;
      }
      else if (choice == 'o') {
         cout << endl << title << " - OUTPUT FULL PLAYLIST" << endl;
         list.PrintList();
      }
      else {
         cout << "Invalid menu choice! Please try again." << endl;
      }
   }
}
//Leif Messinger
//Compile with C++ 20
#include <iostream>
#include <ranges>
#include <vector>
#include <functional>
#include <cctype> //toupper
#include <cxxabi.h>

template <typename T>
void printType(){
    std::cout << abi::__cxa_demangle(typeid(T).name(), NULL, NULL, NULL) << std::endl;
}

template <typename T>
class Slicer{
    public:
        T begin_;
        T end_;
        T trueEnd;
        Slicer(T begin, T end): begin_(begin), end_(begin), trueEnd(end){}
        template<typename U>
        Slicer(U&& vec) : begin_(vec.begin()), end_(vec.begin()), trueEnd(vec.end()){}
        Slicer& finish(){
            begin_ = end_;
            end_ = trueEnd;
            return (*this);
        }
        Slicer& to(long int index){
            begin_ = end_;
            if(index > 0){
                end_ = (begin_ + index);
            }else{
                index *= -1;
                end_ = (trueEnd - index);
            }
            return (*this);
        }
        Slicer& operator[](long int index){
            return to(index);
        }
        T begin(){
            return this->begin_;
        }
        T end(){
            return this->end_;
        }
        Slicer& operator()(std::function<void(decltype(*begin_))> func) {
            for(decltype(*begin_) thing : (*this)){
                func(thing);
            }
            return (*this);
        }
};
static_assert(std::ranges::range< Slicer<std::vector<int>::const_iterator> >);

int main(){
    std::string vec = "abcdefghijklmnopqrstuvwxyz";
    Slicer<std::string::const_iterator> bruh(vec);
    
    //printType<decltype(bruh)>();

    bruh.to(3)([](char yeet){
        std::cout << yeet;
    })
    .to(-1)([](char yeet){
        std::cout << char(std::toupper(yeet));
    }).finish()([](char yeet){
        std::cout << yeet << yeet << yeet << yeet << yeet;
    });
    
    std::cout << std::endl << std::endl;
    
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
    Slicer<int*> arrSlicer(arr, arr + (sizeof(arr)/sizeof(int)));
    
    std::cout << "[";
    arrSlicer.to(-1)([](int yeet){
        std::cout << yeet << ", ";
    }).finish()([](int yeet){
        std::cout << yeet << "]" << std::endl;
    });

    return 0;
}