我试图以初始化二维矢量的方式打印出二维矢量的内容。
#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;
}
}
这是确定2d向量的内容。到目前为止,此代码可以打印出用逗号分隔的每个索引。另一方面,我需要编写代码来表示新矢量的开始位置。
输出:
-1, 0, 1, 0, 0, -1, 0, 1,
预期输出:
{{-1,0}, {1,0}, {0,-1}, {0,1}}
答案 0 :(得分:0)
这就是我的做法:
#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 << "}";
}
输出:{{-1,0}, {1,0}, {0,-1}, {0,1}}
在第一个示例中,我使用了range-based for loop。如果您熟悉多种语言中的foreach
的概念,那基本上就是一回事。如果您不需要实际的索引变量,那么它会更安全,因为您不必担心被一个变量和在容器外部建立索引。在map
或set
等容器上,您也需要使用迭代器而不是索引。
如果您要像嵌套索引循环那样执行相同的操作,就像您在原始文档中那样,它可能看起来像这样:
#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 << "}";
}