c++,如何将一个向量复制为一个向量的向量



我认为以下代码可以工作,下面是我的代码的删节版本:

#include <iostream>
#include <vector>
int main()
{
int xCoordMovement, yCoordMovement;
int rows, cols;
char point = '*';
std::cout << "enter number of rows";
std::cin >> rows;
cols = rows;
std::vector<std::vector<char>> grid(rows, std::vector<char>(cols, '0'));
std::vector<char> flattenedGrid;
for (int x = 0; x < rows; x++)
{
for (int y = 0; y < cols; y++)
std::cout << grid[x][y];
std::cout << std::endl;
}
std::cout << "input for x coord: ";
std::cin >> xCoordMovement;
std::cout << "input for y coord: ";
std::cin >> yCoordMovement;
for (int x = 0; x < rows; x++)
for (int y = 0; y < cols; y++)
flattenedGrid.push_back(grid[x][y]);
flattenedGrid[((cols * yCoordMovement) - (rows - xCoordMovement)) - 1] = point;
std::cout << flattenedGrid.size() << std::endl;
for(int i = 0; i < flattenedGrid.size(); i++)
std::cout << flattenedGrid[i];
std::cout << std::endl;
for (int x = 0; x < rows; x++)
for (int y = 0; y < cols; y++)
for (int i = 0; i < flattenedGrid.size(); i++)
grid[x][y] = flattenedGrid[i];

for (int x = 0; x < rows; x++)
{
for (int y = 0; y < cols; y++)
std::cout << grid[x][y];
std::cout << std::endl;
}
std::cin.ignore();
std::cin.get();
return 0;
}

然而,它似乎并没有改变网格的值,它现在应该有一个位于其坐标之一的恒星值,但遗憾的是,所有网格包含的都是它的原始值。

相关输出:

00000 
00000 
00000 
00000 
00000

期望输出:

00000
000*0
00000
00000
00000

这是我希望将向量的值分配给向量中的向量的位:

for (int x = 0; x < rows; x++)
for (int y = 0; y < cols; y++)
for (int i = 0; i < flattenedGrid.size(); i++)
grid[x][y] = flattenedGrid[i];

您必须对代码进行以下几项更改:

  • 首先,将point分配给flattenedGrid的元素时

更改:

flattenedGrid[((cols * yCoordMovement) - (rows - xCoordMovement)) - 1] = point;

到:

flattenedGrid[(yCoordMovement) + (rows * xCoordMovement)] = point;
  • 第二,当用flattenedGrid元素重新填充grid

更改:

for (int x = 0; x < rows; x++)
for (int y = 0; y < cols; y++)
for (int i = 0; i < flattenedGrid.size(); i++)
grid[x][y] = flattenedGrid[i];

到:

for (int x = 0; x < rows; x++)
for (int y = 0; y < cols; y++)          
grid[x][y] = flattenedGrid[rows * x + y];

最新更新