This is Part 1 of the 7-part Exercise 6-0. Click here to see the other parts.
Exercise 6-0 (Part 1 / 7)
Relating to section 6.1 of the textbook (page 101-103). There are many ways to append elements from container B to container A (the base). In this post I shall implement and test out 3 known ways to do this: (1) pusb_back method, (2) insert method, and (3) copy method. The test confirms that all 3 methods produce the same results.
The Project
This section summarises the partitioned program in the form of C++ source and header files.
Source File List
Header File List
Source Files
main.cpp
#include <iostream> // cin, cout, endl #include <string> // string #include <vector> // vector #include <algorithm> // copy #include "vcout.h" // vcout using std::string; using std::vector; using std::cin; using std::cout; using std::endl; int main() { string word; // a word vector<string> wordCollectionA; // a collection of words cout << "Define vector<string> wordCollectionA below..." << endl; // Populate wordCollectionA. while (cin >> word) wordCollectionA.push_back(word); cin.clear(); vector<string> wordCollectionB; // another collection of words cout << "Define vector<string> wordCollectionB below..." << endl; // Populate wordCollectionB. while (cin >> word) wordCollectionB.push_back(word); cin.clear(); // Test appending using the push_back method vector<string> baseForPushBack = wordCollectionA; for (vector<string>::const_iterator i = wordCollectionB.begin(); i != wordCollectionB.end(); ++i) baseForPushBack.push_back(*i); // Test appending using the insert method vector<string> baseForInsert = wordCollectionA; baseForInsert.insert(baseForInsert.end(), wordCollectionB.begin(), wordCollectionB.end()); // Test appending using the copy method vector<string> baseForCopy = wordCollectionA; copy(wordCollectionB.begin(), wordCollectionB.end(), back_inserter(baseForCopy) ); // Display results cout << "Append wordCollectionB to wordCollectionA with push_back method..." << endl; vcout(baseForPushBack); cout << "Append wordCollectionB to wordCollectionA with insert method..." << endl; vcout(baseForInsert); cout << "Append wordCollectionB to wordCollectionA with copy method..." << endl; vcout(baseForCopy); return 0; }
vcout.cpp
#include <iostream> #include <string> // string #include <vector> // vector using std::cout; using std::endl; using std::string; using std::vector; int vcout(const vector<string>& v) { for (vector<string>::const_iterator i = v.begin(); i != v.end(); ++i) cout << (*i) << endl; return 0; }
Header Files
vcout.h
#ifndef GUARD_VCOUT_H #define GUARD_VCOUT_H #include <string> #include <vector> int vcout(const std::vector<std::string>&); #endif // GUARD_VCOUT_H
Result
The test demonstrates that all 3 methods are equivalent – they produce the same result and serve the same purpose. i.e. appending elements to the base container.
Imagine:
- We have a vector<string> wordCollectionA container that contains the string elements “Item0” and “Item1”.
- We have a vector<string> wordCollectionB container that contains the string elements “Item2”, “Item3” and “Item4”.
- Appending the elements in wordCollectionB to the (base) wordCollectionA should result in A containing “Item0”, “Item1”, “Item2”, “Item3” and “Item4”.
Define vector<string> wordCollectionA below... Item0 Item1 ^Z Define vector<string> wordCollectionB below... Item2 Item3 Item4 ^Z Append wordCollectionB to wordCollectionA with push_back method... Item0 Item1 Item2 Item3 Item4 Append wordCollectionB to wordCollectionA with insert method... Item0 Item1 Item2 Item3 Item4 Append wordCollectionB to wordCollectionA with copy method... Item0 Item1 Item2 Item3 Item4