c++ - 当参数必须是使用指针的二维数组时如何在 C++ 中使用 swap()

标签 c++

首先,我想确保在使用指针时可以正确访问数组成员。
这是等价的吗?

for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> a[i][j];
        }
    }
for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> *(*(a + i) + j);
        }
    }
这就是我个人在使用指针时读入数组的方式。如果没问题(我问这个是因为我可能做错了)我应该如何使用交换功能?
我试过这样做:
swap(*(*(a + i) + j), *(*(a + j) + i));
但没有任何 react ,同时这样做
int aux = *(*(a + i) + j);
                *(*(a + i) + j) = *(*(a + j) + i);
                *(*(a + j) + i) = *(*(a + i) + j);
让它工作。
这是整个功能
void parcugereMatrice(int n, int**& a)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (paritate(*(*(a+i)+j)) == paritate(*(*(a + j) + i)))
            {
                /*int aux = *(*(a + i) + j);
                *(*(a + i) + j) = *(*(a + j) + i);
                *(*(a + j) + i) = *(*(a + i) + j);*/
                swap(*(*(a + i) + j), *(*(a + j) + i));
            }
        }
    }
}
我认为我需要通过引用将值传递给交换函数才能工作,但我不知道如何。现在,我认为值是按值传递的,所以在这个函数之外不会有任何变化(如果我错了,请纠正我)。
如果这是答案,参数应该是什么样子?
谢谢。

最佳答案

您可以使用 std::swap_ranges .
如果您的指针是衰减的二维数组:

void swap(int* a[N], int* b[N], int) {
  if (a != b)
    std::swap_ranges(&a[0][0], &a[N][N], &b[0][0]);
}
如果您的指针是指向数组的指针的衰减数组:
void swap(int** a, int** b, int n) {
  if (a != b)
    std::swap_ranges(&a[0], &a[n], &b[0]);
}
如果您的指针没有衰减(而是动态分配):
void swap(int** a, int** b, int) {
  std::swap(a, b);
}

关于c++ - 当参数必须是使用指针的二维数组时如何在 C++ 中使用 swap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64808379/

相关文章:

c++ - 返回带有函数捕获的 lambda

c++ - 根据数据成员排序或过滤对象数组

c++ - 输出二维 vector 的语法

c++ - PdhGetFormattedCounterValue 和正确的格式

c++ - QDate - 在两个日期之间搜索

c++ - 获取标准化后最小化窗口的外观位图

c++ - giuliani framework做拖拽功能

c++ - 如何在 Windows 7 上使用 DirectX 11 和 Visual Studio 2015 工具集 v140

c++ - 如何在我的应用程序级别使对话窗口始终位于最前面

c++ - 调用模板类构造函数