I'm attempting to print out the contents of a 2d vector in the same fashion in which they are initialized.
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<vector<int > > frontier = {{-1,0}, {1,0}, {0,-1}, {0,1}};
for (int i = 0; i < frontier.size(); i++) {
for (int j = 0; j < frontier[i].size(); j++) {
std::cout << frontier[i][j] << ", ";
}
}
cout << "End of frontier. " << endl;
/* This below is an implementation that I found online but found
no
* way to be able to implement the column reference.
*/
for (int i = 0; i < frontier.size(); ++i) {
for (int j = 0; j < col; ++j) {
cout << frontier[i + j * col] << ' ';
}
cout << endl;
}
}
This is to determine the contents of a 2d vector. So far, this code can print out every index separated by a comma. I, on the other hand, need to write code that will signify where a new vector begins.
output:
-1, 0, 1, 0, 0, -1, 0, 1,
expected output:
{{-1,0}, {1,0}, {0,-1}, {0,1}}
Here's how I might do it:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::vector<int>> frontier = { {-1,0}, {1,0}, {0,-1}, {0,1} };
std::string outerPrefix = "";
std::cout << "{";
for(const auto& outer : frontier)
{
std::cout << outerPrefix << "{";
std::string innerPrefix = "";
for(auto inner : outer)
{
std::cout << innerPrefix << inner;
innerPrefix = ",";
}
std::cout << "}";
outerPrefix = ", ";
}
std::cout << "}";
}
Output: {{-1,0}, {1,0}, {0,-1}, {0,1}}
In the first example I used a range-based for loop. If you're familiar with the concept of foreach
in many languages it's basically the same thing. If you don't need an actual index variable it is safer because you don't have to worry about being off by one and indexing outside the container. It also works the same way on containers like map
or set
where you would need to use iterators rather than an index.
If you were to do the same thing with nested index loops like you had in your original it might look something like this:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::vector<int>> frontier = { {-1,0}, {1,0}, {0,-1}, {0,1} };
std::cout << "{";
for(size_t outer = 0; outer < frontier.size(); ++outer)
{
if (outer != 0)
{
std::cout << ", ";
}
std::cout << "{";
for(size_t inner = 0; inner < frontier[outer].size(); ++inner)
{
if (inner != 0)
{
std::cout << ",";
}
std::cout << inner;
}
std::cout << "}";
}
std::cout << "}";
}