我是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*
。