http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h
Chapter 8 // Exercise 5
5. Write two functions that reverse he order of elements in a vector<int>. For example 1,3,5,7,9 becomes 9,7,5,3,1. The first reverse function should produce a new vector with the reversed sequence, leaving its original vector unchanged. The other reverse function should reverse the elements of its vector without using any other vectors (hint: swap).
#include "stdafx.h"
#include "std_lib_facilities.h"
//prints a given vector to the screen with a label
void print(string& label, const vector<int>& v)
{
cout << label << ": " << endl;
for (int i = 0; i < v.size(); ++i)
{
//if incrementor is divisible by 10, start a new line to print
cout << v[i] << '\t';
if (i % 10 == 0 && i != 0)
cout << '\n';
}
cout << '\n';
}
//calculates fibonnaci sequence for a given amount of numbers
void fibonnaci(int first, int second, vector<int>& v, int howMany)
{
//is vector empty?
if (v.size() == 0)
{
v.push_back(first);
v.push_back(second);
int temp;
//pushback numbers from sequence depending on how many we want
//start with 3rd number
for (int i = 1; i < howMany; ++i)
{
temp = v[i] + v[i - 1];
v.push_back(temp);
}
}
else
cout << "Sorry that vector is not empty.\n";
}
//swap vectors elements creating new vector leaving original unchanged
vector<int> swap1(const vector<int>& originalV)
{
vector<int> newV;
for (int i = originalV.size() - 1; i >= 0; --i)
{
newV.push_back(originalV[i]);
}
return newV;
}
//swap vectors elements using swap
void swap2(vector<int>& originalV)
{
for (int i = 0; i < originalV.size()/2; ++i)
{
swap(originalV[i], originalV[originalV.size() - (i + 1)]);
}
}
int main()
{
vector<int> fibonacciNumbers;
vector<int> newFibonacci;
//populate vector with sequence
fibonnaci(1, 2, fibonacciNumbers, 10);
//swap creating a copy and assigning to new vector
newFibonacci = swap1(fibonacciNumbers);
//print the vectors
string label = "Fibonacci Numbers";
print(label, fibonacciNumbers);
label = "New Fibonacci";
print(label, newFibonacci);
//print the original vector
label = "Fibonacci Numbers";
print(label, fibonacciNumbers);
//swap using swap function and no other vectors
swap2(fibonacciNumbers);
//print the original vector which has now been modified
label = "Swapped Fibonocci Numbers";
print(label, fibonacciNumbers);
keep_window_open();
return 0;
}
For this exercise I decided to build upon the previous ones instead of writing numbers to pushback into random vectors. The first swap, swap1() works by taking a const reference to the original vector (so it doesn't change it) and applies those values to a new vector. The for loop starts at the end of the original vector and pushes back a number into the new one until it gets to the first value. It then returns the new vector as value.
Chapter 8 // Exercise
6. Write versions of the functions from exercise 5, but with a vector<string>.
#include "stdafx.h"
#include "std_lib_facilities.h"
//prints a given string vector to the screen with a label
void print(string& label, const vector<string>& v)
{
cout << label << ": " << endl;
for (int i = 0; i < v.size(); ++i)
{
//if incrementor is divisible by 10, start a new line to print
cout << v[i] << '\t';
if (i % 10 == 0 && i != 0)
cout << '\n';
}
cout << '\n';
}
//swap string vectors using another vector
vector<string> swapString1(const vector<string>& originalV)
{
vector<string> newV;
for (int i = originalV.size() - 1; i >= 0; --i)
{
newV.push_back(originalV[i]);
}
return newV;
}
void swapString2(vector<string>& originalV)
{
for (int i = 0; i < originalV.size() / 2; ++i)
{
swap(originalV[i], originalV[originalV.size() - (i + 1)]);
}
}
int main()
{
vector<string> myString = { "hello", "world", "this", "is", "a", "blog", "post" };
vector<string> newString;
//swap creating a copy
newString = swapString1(myString);
//print the vectors
string label = "My String";
print(label, myString);
label = "New String";
print(label, newString);
//swap without creating a copy
label = "My String";
print(label, myString);
swapString2(myString);
label = "My String";
print(label, myString);
keep_window_open();
return 0;
}
No comments:
Post a Comment