0 1 2
- - - - -
0| 1 2 3
1| 4 5 6
2| 7 8 9
如何確定此二維數組中的任意數字的座標?在2D陣列中查找值
例如,如果我想知道數字9的座標,它將是[2][2]
。
我怎麼能通過C++程序上的代碼來做到這一點?
0 1 2
- - - - -
0| 1 2 3
1| 4 5 6
2| 7 8 9
如何確定此二維數組中的任意數字的座標?在2D陣列中查找值
例如,如果我想知道數字9的座標,它將是[2][2]
。
我怎麼能通過C++程序上的代碼來做到這一點?
基本上你需要通過檢查數組來檢查每個單元格的內容。
int a[3][3]={{1,2,3},{4,5,6},{7,8,9});
for(int x=0;x<3;++x)
for(int y=0;y<3;++y)
if(a[x][y] == 9)
cout << "9 found at ["<<x<<"]["<<y<<"]\n";
如果你可以用std::vector<std::vector<int>>
相反,它應該是:
std::vector<std::vector<int>> vec = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (int i = 0; i < vec.size(); i++)
{
auto it = std::find(vec[i].begin(), vec[i].end(), 9);
if (it != vec[i].end())
{
std::cout << "Number 9 found at vec[" << i << "][" << std::distance(vec[i].begin(), it) << "].";
}
}
這裏有兩種方法。第一個使用標準算法,第二個使用普通循環。
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
const size_t N = 3;
int a[N][N] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
int value = 9;
auto it = std::find(reinterpret_cast<int *>(a),
reinterpret_cast<int *>(a) + N * N,
value);
if (it != reinterpret_cast<int *>(a) + N * N)
{
size_t n = std::distance(reinterpret_cast<int *>(a),
it);
std::cout << "Row = " << n/N << ", Column = " << n % N << std::endl;
}
size_t row = 0;
size_t col = 0;
for (; row < N; row++)
{
col = 0;
while (col < N && a[row][col] != value) col++;
if (col != N) break;
}
if (row != N)
{
std::cout << "Row = " << row << ", Column = " << col << std::endl;
}
return 0;
}
輸出是
Row = 2, Column = 2
Row = 2, Column = 2
或者你可以寫一個函數如下方式
#include <iostream>
#include <utility>
const size_t N = 3;
std::pair<size_t, size_t> find_position(const int (&a)[N][N], int value)
{
size_t row = 0;
size_t col = 0;
for (; row < N; row++)
{
col = 0;
while (col < N && a[row][col] != value) col++;
if (col != N) break;
}
return { row, col };
}
int main()
{
int a[N][N] =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
int value = 9;
auto position = find_position(a, value);
if (position.first != N)
{
std::cout << "Row = " << position.first
<< ", Column = " << position.second << std::endl;
}
return 0;
}
輸出是
Row = 2, Column = 2
我不知道我米看,什麼二維數組? –
@VladfromMoscow現在是。刪除我以前的評論,因爲它與問題的新主體無關。 –