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;
}