Vector Methods

Vector Methods

Erasing from a vector properly

#include <vector>
#include <iostream>
using namespace std;

void printvec(vector <int> v){
    for (unsigned int i = 0; i < v.size(); i++)
        cout << v[i] << ' ';
    cout << endl;
    return;
}

void setvec(vector <int> &v){
    v.clear();
    for (int i = 0; i < 10; i++)
    {
            v.push_back(i);
    }

}

int main()
{
    //create vector
    vector <int> v;
    vector <int> a;
    setvec(v);
    printvec(v);

    //remove items from vector CORRECT way (iterating backwards)
    cout<<"correct"<<endl;
        // unsigned int seg faults as i-- on last iteration = -1
        for (int i = v.size()-1 ; i >= 0; i--)
        {
            if (v[i] < 5)
            {
                v.erase(v.begin() + i);
            }
        }
        printvec(v);

    //reset vector
    setvec(v);

    //remove items from vector the WRONG way (iterating forwards)
    cout<<"wrong"<<endl;
        for (unsigned int i = 0; i < v.size();i++)
        {
            if (v[i] < 5)
            {
                v.erase(v.begin() + i);
            }
        }
    printvec(v);

    setvec(v);

    //alternate method to create new vector with items to keep (not in place)
    cout<<"correct but not in place"<<endl;
    for (unsigned int i = 0; i < v.size();i++)
    {
        if (v[i] >= 5)
        {
            a.push_back(v[i]);
        }
    }
    printvec(a);
    return 0;
}

Vector order

#include <iostream>
#include <vector>
#include <algorithm>    // std::find and reverse

using namespace std;

int main()
{
    vector <char> alpha;
    vector <char> backwards;

    for (int i=65; i<65+26; i++)
    {
        alpha.push_back(char(i));
    }

    /*
    for (int i=alpha.size()-1; i>=0; i--)
    {
        backwards.push_back(alpha.at(i));
    }
    */
    //or do this
    backwards=alpha;
    reverse(backwards.begin(), backwards.end());  //#include <algorithm>

    cout<<"printing alpha "<<endl;
    for (unsigned int x=0; x<alpha.size() ; x++)
    {
        cout<<alpha[x];
    }
    cout<<endl;

    cout<<"printing backwards"<<endl;
    for (vector <char>::iterator i=backwards.begin(); i<backwards.end(); i++)
    {
        cout<<*i; //dereference i
    }
    cout<<endl;
    cout<< *(alpha.begin()) << alpha[0] << alpha.front() <<endl; //first
    cout<< *(alpha.end()-1) << alpha[alpha.size()-1] << alpha.back() << endl; //last
    cout<<endl;

    vector <char>::iterator iter;
    //find(start, end, element) requires #include <algorithm>
    iter = find(alpha.begin(), alpha.end(), 'C');
    if (iter == alpha.end())
    {
        cout<<"NOT FOUND"<<endl;
    }
    else
    {
        cout<< *iter << " found at location "<< (iter - alpha.begin()) <<endl;
    }
    
    return 0;

}

Sort integers

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;

void printvec(const vector <int> v) {
    for (auto i: v)
        cout << i << " ";
    cout << endl;
}

int main() {
    srand(static_cast<unsigned>(time(0)));

    vector <int> v(10);
    for (unsigned int x = 0; x < v.size(); x++) {
        v[x] = (100.0 * rand()/(RAND_MAX+1.0));
    }
    printvec(v);
    sort(v.begin(), v.end());
    printvec(v);

    return 0;
}

Sort strings by size

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void printvec(const vector <string> v) {
    for (auto i: v)
        cout << i << " ";
    cout << endl;
}

bool mysort(string x, string y){
    return (x.size() < y.size());
}

int main() {
    vector <string> s={"dogs", "banana", "animals", "zoo","r" };
    printvec(s);
    sort(s.begin(), s.end(), mysort );
    printvec(s);

    return 0;
}