vector
例如:
v2={1,2,3,4,5;
6,7,8;
9,10,11}
v1={1,6,9,2,7,10,3,8,11,4,5}
该回答引用ChatGPT:您可以使用两个嵌套的循环来实现这个目标,首先循环每一列,然后循环每一行,将当前列的元素添加到 v1 中。如果当前行的元素已经添加完了,就跳到下一行。
以下是一个实现示例:
vector<vector<int>> v2{{1,2,3,4,5}, {6,7,8}, {9,10,11}};
vector<int> v1;
int maxRows = 0;
for (const auto& row : v2) {
maxRows = max(maxRows, (int)row.size());
}
for (int i = 0; i < maxRows; ++i) {
for (const auto& row : v2) {
if (i < row.size()) {
v1.push_back(row[i]);
}
}
}
// 输出结果
for (const auto& num : v1) {
cout << num << " ";
}
输出结果:
1 6 9 2 7 10 3 8 11 4 5
在这个示例中,我们首先找到 v2 中最长的行数,然后按照每一列进行遍历。对于每一列,我们循环 v2 中的每一行,并将当前列的元素添加到 v1 中。如果当前行的元素已经添加完了,就跳到下一行。最后输出 v1 的结果。
可以使用两个循环来遍历 v2,并将其元素存储到 v1 ,
下面的代码自己加入v2的初始化就行了,有用话请采纳一下,谢谢
#include <vector>
std::vector<int> flattenVector(std::vector<std::vector<int>> v2)
{
std::vector<int> v1;
int numRows = v2.size();
int maxRowLength = 0;
// 找到最大行长度
for (int i = 0; i < numRows; i++) {
int rowLength = v2[i].size();
if (rowLength > maxRowLength) {
maxRowLength = rowLength;
}
}
// 将 v2 中的元素添加到 v1
for (int j = 0; j < maxRowLength; j++) {
for (int i = 0; i < numRows; i++) {
if (j < v2[i].size()) {
v1.push_back(v2[i][j]);
}
if (i < numRows - 1) {
v1.push_back(-1); // 添加换行符
}
}
}
return v1;
}
c++
vector> v2 = {{1,2,3,4,5}, {6,7,8}, {9,10,11}};
vector v1;
int max_size = 0; // 记录v2中最长的一行的长度
for (const auto& row : v2) {
max_size = max(max_size, static_cast(row.size())); // 更新最长行的长度
}
for (int i = 0; i < max_size; i++) { // 外层循环遍历每一列
for (const auto& row : v2) { // 内层循环遍历每一行
if (i < row.size()) { // 如果当前行还有元素未加入v1中
v1.push_back(row[i]); // 将当前行的元素加入v1中
}
}
}
int main()
{
vector<vector<int>> v2 = { {1,2,3,4,5},
{6,7,8},
{9,10,11} };
vector<int> v1;
for (auto v:v2) {
v1.insert(v1.end(),v.begin(),v.end());
}
for (int n : v1) {
cout<<n<<" "<<" ";
}
}