一个如何实现string和long, int, double模板函数的建议
A piece of advice how to realize a template function for string and long, int, double
我有个任务。它说我必须做一个这样的模板函数template <typename T>
int reduce(T ar[], int n);
。这个函数从最小值到最大值排序,并删除相等的值。它还说我必须使用STL。我不需要解决方案,只需要建议我该怎么做。这就是我的解决方案。
template <typename T>
int reduce(T ar[], int n)
{
ostream_iterator<int, char> out_iter(cout, " ");
T * iter_begin = ar;
T * iter_end = ar + n;
sort(iter_begin, iter_end);
copy(iter_begin, iter_end, out_iter);
cout << endl;
iter_end = unique(iter_begin, iter_end);
copy(iter_begin, iter_end, out_iter);
//erase(iter_begin, iter_end);
return 0;
}
void main()
{
srand((unsigned)time(NULL));
int size = 20;
long * mas = new long[size];
for (int i = 0; i < size; i++)
mas[i] = rand() % size + 1;
reduce(mas, size);
string str = "hello how are you doing";
reduce(&str, str.length());
delete[] mas;
}
您的reduce函数期望一个数组,但您正在传递reduce(&str, str.length());
中字符串的地址。这使得它的行为就像你传递一个大小为str.length()
的std::string
数组一样。您需要做的是将字符串转换为字符数组,然后将其传递给函数。
如果你使用的是STL,你应该让你的函数与STL算法实现的方式相同,比如你使用的std::sort
:
template <typename Iter>
int reduce(Iter iter_begin, Iter iter_end )
{
ostream_iterator<int, char> out_iter(cout, " ");
sort(iter_begin, iter_end);
copy(iter_begin, iter_end, out_iter);
cout << endl;
iter_end = unique(iter_begin, iter_end);
copy(iter_begin, iter_end, out_iter);
//erase(iter_begin, iter_end);
return 0;
}
int main()
{
srand((unsigned)time(NULL));
const int size = 20;
long mas[size];
for (int i = 0; i < size; i++)
mas[i] = rand() % size + 1;
reduce(mas, mas + size);
string str = "hello how are you doing";
reduce(str.begin(), str.end());
return 0;
}
当你必须使用你的接口时,你必须使用char数组而不是std::string
,像这样:
char str[] = "hello how are you doing";
int len = reduce( str, strlen( str ) );
str[len] = 0;
你还需要修复你的函数reduce
返回唯一元素的计数而不是0。
相关文章:
- C++在数学计算中将double转换为int
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 进程为包含double但不包含int的模板返回了-103741819(0xC0000005)
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 错误:"int pow(double,int)"与上一个声明int pov(double a,int
- 重载函数 int vs double
- 如何修复 E2015 "ambiguity between pow(double,double) and pow(float,int)"
- 用于检查"is int"/"is double"/等的模板函数
- 使用 double 在 C++ 中初始化 int 之间的差异
- 如何为包含map<int,*double>成员的类编写析构函数?
- 如何使用 JNI 将 double 和无符号 int 从本机 c 库返回到 java
- 对类似"struct {double, int}"对象使用reinterpret_cast进行对象访问
- 函数将double/int转换为字符串
- c++中从double/int/string到bool的自动转换
- 共享库从 void * "invalid conversion" 到 double(*) (int*) 时出错?
- 无效的数组下标类型' double[int] '
- 错误cv::SURF::SURF(double,int,int,bool,bool)在OpenCV和c++中实现SURF
- 我面临这个:我的程序中数组下标的无效类型"double[int]"
- 算术问题(double = int / int)
- 为什么从c++ 11中删除了std::pow(double, int) ?