具有预定义大小的 C++ std::vectors
C++ std::vectors with predefined sizes
在查看问题的解决方案时,我遇到了矢量的实现。
const int MX = 100000;
std::vector <int> adj[MX];
push_back()
函数不适用于矢量 class 的实现,要添加一个元素,使用了以下代码:
std::ifstream fin ("file.in");
int N = 5;
for (int i = 0; i < (N-1); i++) {
int A,B; fin >> A >> B; // reading values from another file
adj[A].pb(B), adj[B].pb(A);
}
此代码添加的方式是将值推回列表的特定部分,我将其想象为表单向量中的向量:
{
{ },
{ }
}
此外,我将如何遍历此向量,因为 for (int n : adj)
不起作用。我不确定这个向量是什么形式,因为这种循环方法不起作用。
你拥有的是 C 风格的向量数组,你可以立即将其替换为 std::array
:
std::array<std::vector<int>, MX> adj;
要遍历这些,您必须使用嵌套循环,外层循环遍历数组,内层循环遍历每个向量,如下所示:
const int MX = 3;
//array of 3 vectors
std::array<std::vector<int>, MX> adj {{{1,2,3,4}, {5,6,7,8}, {9, 10, 11, 12}}};
for(auto &v : adj){ //for the array
for(auto i : v){ //for each vector
std::cout << i << " ";
}
std::cout << "\n";
}
输出:
1 2 3 4
5 6 7 8
9 10 11 12
您还可以使用 C 样式索引访问单个元素:
std::cout << adj[1][0]; // vector element index 0 of array index 1
或者以更安全的方式,使用容器成员 at
:
std::cout << adj.at(1).at(0);
这将输出 5
.
不过你要小心,在随机填充数组时,数组不应该有空元素,否则循环会遍历未初始化的数组成员,这并不理想,也许你正在寻找一些 other kind of container.
在查看问题的解决方案时,我遇到了矢量的实现。
const int MX = 100000;
std::vector <int> adj[MX];
push_back()
函数不适用于矢量 class 的实现,要添加一个元素,使用了以下代码:
std::ifstream fin ("file.in");
int N = 5;
for (int i = 0; i < (N-1); i++) {
int A,B; fin >> A >> B; // reading values from another file
adj[A].pb(B), adj[B].pb(A);
}
此代码添加的方式是将值推回列表的特定部分,我将其想象为表单向量中的向量:
{
{ },
{ }
}
此外,我将如何遍历此向量,因为 for (int n : adj)
不起作用。我不确定这个向量是什么形式,因为这种循环方法不起作用。
你拥有的是 C 风格的向量数组,你可以立即将其替换为 std::array
:
std::array<std::vector<int>, MX> adj;
要遍历这些,您必须使用嵌套循环,外层循环遍历数组,内层循环遍历每个向量,如下所示:
const int MX = 3;
//array of 3 vectors
std::array<std::vector<int>, MX> adj {{{1,2,3,4}, {5,6,7,8}, {9, 10, 11, 12}}};
for(auto &v : adj){ //for the array
for(auto i : v){ //for each vector
std::cout << i << " ";
}
std::cout << "\n";
}
输出:
1 2 3 4
5 6 7 8
9 10 11 12
您还可以使用 C 样式索引访问单个元素:
std::cout << adj[1][0]; // vector element index 0 of array index 1
或者以更安全的方式,使用容器成员 at
:
std::cout << adj.at(1).at(0);
这将输出 5
.
不过你要小心,在随机填充数组时,数组不应该有空元素,否则循环会遍历未初始化的数组成员,这并不理想,也许你正在寻找一些 other kind of container.