我是C ++的新手,这是我编写的模板选择排序函数,它接受一个数组并将其长度作为参数。“”
template <class T>
void mySort(T a[], int len) {
for (int i = 0; i < len; i++)
{
int min = i;
for (int j = i+1; j < len; j++)
{
if (a[min]>a[j])
{
min = j;
}
}
if (min!=i)
{
T tmp = a[min];
a[min] = a[i];
a[i] = tmp;
}
}
}
这里有几件事情我感到困惑
首先,我知道,如果我们在数组中传递给函数,它实际上不是这个数组的副本,因此这背后整个概念?是我们传递其引用还是指向第一个索引的指针?
其次,是否可以计算此函数内部数组的长度,而不用传递为参数?
第三,有人告诉我,在c ++中最好使用char []而不是字符串,因为char []与基本c有关,而字符串只是c ++中的STL,所以对于我的大部分代码来说,我应该使用char []而不是字符串?
首先,我知道如果我们将数组传递给函数,实际上它不是该数组的副本,那么这背后的整个概念是什么?是我们传递其引用还是指向第一个索引的指针?
它是第一个元素的指针。即使您编写了T a[]
,该语言也将其转换T* a
为函数参数。很奇怪,但是我们走了;这就是在C和C ++中“按值传递数组”的工作方式(或不起作用)。
其次,是否可以计算此函数内部数组的长度,而不用传递为参数?
否。该类型的信息不可用,因此必须将其作为单独的参数传递。
解决方法包括通过引用传递数组本身:
template <class T, std::size_t N>
void mySort(T (&a)[N]) {
…或传递astd::array
或传递a std::vector
,所有这些都“知道”尺寸。
第三,有人告诉我,在c ++中最好使用char []而不是字符串,因为char []与基本c有关,而字符串只是c ++中的STL,所以对于我的大部分代码来说,我应该使用char []而不是字符串?
这与通常的建议相反。尽管使用char
数组不是邪恶的,并且可以在有一些不需要动态分配的简单数组的情况下完成,但它std::string
更加灵活且易于使用,通常应成为字符数组的首选工具。
我不知道“这只是C ++中的STL”的含义。
如果您正在执行“竞争性编程”,那么通常的约定可能不适用,但是,那不是真正的编程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句