在C ++中对指针数组进行排序

康纳

希望我能对我做的排序方法有所建议。

这段代码的目的是创建一个int指针数组,并根据常规int数组的内容对该数组中的指针进行排序。然后根据原始int数组的位置为其他变量分配值。

我在这段代码中遇到的奇怪之处在于,测试代码实际上不会影响到我所知道的任何东西……实际上是在影响我的指针的内容。也许值没有改变,但是我编写测试代码的方式导致了错误。

 //create array
 int c[8] = {3,1,5,7,8,2,6,4};
 //create pointer array
 int *newptr[8];
 for(int k = 0; k<8; k++)
 {
     newptr[k] = &c[k];
 }
//sort pointer array
for(int j = 0; j<8; j++)
{
    for(; j > -1 && *newptr[j] < *newptr[j+1]; j--)
    {
        int *temp = newptr[j+1];
        newptr[j+1] = newptr[j];
        newptr[j] = temp;
    }
}
//set lookuplocation
int lookuplocation;
for(int i = 0; i<8; i++)
{
    cout << *newptr[i];

    if(newptr[i] == &c[0])
    {
        cout << *newptr[i] << endl;

        //If I use endl or \n to test the pointers values I end up with only
        //a part of the correct data. 

        cout << "\nSuccess!\n";
        lookuplocation = 0;
    }
}
//Also for my last test sometimes the first element gets messed up as well
//test arrays
for(int k = 0; k<8; k++)
{
    cout << "Element " << k << ": " << *newptr[k] << endl;
    cout << "Element " << k << ": " << newptr[k] << endl;
}
Bartek Banachewicz

我认为实际上可能有人需要以理智的方式对指针数组进行排序:

#include <iostream>
#include <array>
#include <algorithm>

int main() {
    std::array<int, 8> arr { 3, 5, 4, 1, 2, 7, 6, 8 };
    std::array<int*, 8> p_arr;

    for (unsigned i = 0; i < 8; ++i) {
        p_arr[i] = &arr[i];
    }

    std::sort(p_arr.begin(), p_arr.end(), [](int* a, int* b) { return *a < *b; });

    for (auto i : p_arr) 
        std::cout << *i;
}

丑陋的中间循环可以完全替换为超过pped范围的zip范围,但是我现在没有自己的带有引用语义的实现,而且我懒得检查Boost 1。1个

这是Coliru的现场样本

另外,因为我认为我们应该一遍又一遍地重复这一过程,直到新手理解它为止:

  • 不要重新发明分类轮(除非它是玩具实现)
  • 尽可能避免在C ++中使用指针。

1实际上,这对于确保两个范围(在这种情况下为两个数组)具有相同的长度非常重要。不同的压缩约定要么要求范围的长度相同(否则会崩溃或抛出),或者如果其中一个范围太短则填充空白数据。尽管在这样一个简单的程序中看起来很明显,但在实际代码中要小心。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中对char指针数组进行排序

来自分类Dev

用指针对c中的数组进行排序

来自分类Dev

使用C中的指针按升序对数组进行排序

来自分类Dev

冒泡对函数中其他数组的指针数组进行排序(C)

来自分类Dev

在C ++中对共享指针的向量进行排序

来自分类Dev

在C ++中对共享指针的向量进行排序

来自分类Dev

C ++中的指针数组排序算法

来自分类Dev

用函数对数组进行排序而不使用 C 中的指针是行不通的。为什么?

来自分类Dev

使用指针对数组进行排序-C编程

来自分类Dev

C编程:使用指针对数组进行排序的函数

来自分类Dev

使用指针对用户定义对象的C ++数组进行排序?

来自分类Dev

c - 如何对c中的双指针进行字母排序?

来自分类Dev

C-与直接对结构进行排序相比,对结构的指针数组进行排序的速度慢(qsort)

来自分类Dev

在C ++中对结构数组进行排序

来自分类Dev

在C ++中对对象数组进行排序

来自分类Dev

在C中对结构数组进行排序

来自分类Dev

对数组C中的元素进行排序

来自分类Dev

在C中对double数组进行排序

来自分类Dev

在 C 中对 2 Dim 数组进行排序

来自分类Dev

C中的指针数组排序具有意外的输出

来自分类Dev

使用C中的结构指针进行数组分配

来自分类Dev

如何在C / C ++中对多维数组进行排序

来自分类Dev

在C中对数组中的值进行排序

来自分类Dev

C中的指针数组?

来自分类Dev

C ++中的数组指针

来自分类Dev

C ++中的指针数组

来自分类Dev

C ++中的数组指针

来自分类Dev

使用qsort和strcmp对字符串进行C排序的数组-警告:指针类型不兼容

来自分类Dev

对指针c ++的容器进行排序并比较类型

Related 相关文章

热门标签

归档