我是C++的新手。我是一名来自C的学生。

我的目标是编写一个简单的函数,该函数在参数中包含一个数组。
我成功了,但我对结果不满意。

main.cpp

#include <array>
#include <iostream>
#include "MyMath.hpp"

int main()
{
     std::array<int, 5> array = {1, 2, 3, 5, 4};

     MyMath::sortIntArray(array);
     std::cout << array.at(3) << std::endl;
     return 0:
}

MyMath.hpp
#include <array>

 class MyMath {
 public:
     static void sortIntArray(std::array<int, 5> &array)
     {
         array.at(3) = 99;
     }
 }

我创建了一个包含函数的类,因为这是学校的编码风格。
上面的代码存在的问题是,我在函数的参数中写入了数组的大小。 “如果我想对500个数字进行排序怎么办?”

1)
所以我的问题是:编写相同函数而不用写数组大小的最佳方法是什么?

2)
我已经做过一些研究,并且我了解std::vector,但是当您要创建固定大小的数组时使用std::array是否更合适?

3)
我可以使用C-Style数组解决问题:通过将数组的最后一个元素设置为NULL或将size作为第二个参数发送。但是,将等效类用于数组和字符串不是更合适吗? (std::array / std::vector / std::string几乎不再使用int []了)

4)我看过"template"可以让我成功实现目标,但是在编写了排序算法的第二个小函数之后,我注意到对于每个以std::array作为参数的函数,我都必须使用模板疯了

如果答案是简单地使用std::vector或int []。我会需要std::array吗? (因为我认为它并不比int []更好,所以我可以使用int []解决问题,如我在3中所说)。我不能用std::array解决问题

有四个问题。对于我对这种语言的一般理解,我认为重要的是考虑回答所有4个问题(即使这只是一个很短的句子)。
预先谢谢你。

最佳答案

查看std::sort的接口(interface)。与其采用具体的容器类型,不如采用通用的[start, end)迭代器对。然后,如果调用者想要对 vector 进行排序,则可以传入一对std::vector<int>::iterator_type。如果他们想对5个int数组进行排序,则可以传入std::array<int, 5>::iterator_type。如果他们想对C样式的数组进行排序,则可以传入int*

07-25 21:53
查看更多