Итак, задача : Реализовать шаблонные функции (массив передаётся в функцию в качестве параметра), выполняющие следующие действия:
возвращение в виде результата вновь созданного одномерного динамического массива (увеличенного размера на 2 элемента по сравнению с передаваемым массивом) и освобождение памяти из-под переданного динамического массива; массив-результат должен содержать все элементы передаваемого в функцию массива, а в конец массива-результата добавляются максимальный элемент и сумма элементов передаваемого в функцию исходного массива.
template <typename T>
T MaxElem(T *arr, int size)
{
int indexOfMaxElem = 0;
for (int pos = 1; pos < size; ++pos)
{
if (arr[pos] > arr[indexOfMaxElem])
indexOfMaxElem = pos;
}
return arr[indexOfMaxElem];
}
template <typename T>
T SummOfElem(T *arr, int size)
{
T summ = 0;
for (int pos = 0; pos < size;++pos)
summ += arr[pos];
return summ;
}
template <typename T>
T *NewArr(T *arr, int size)
{
T *newArr = new T[size + 2];
for (int pos = 0; pos < size; ++pos)
newArr[pos] = arr[pos];
newArr[size] = MaxElem(arr, size);
newArr[size + 1] = SummOfElem(arr, size);
return newArr;
}
так же необходимо сделать специализацию шаблона для типа char*
вот код для функции для char *
int LengthOfWord(char *word)
{
int length = 0;
while (*word)
{
++word;
++length;
}
return length;
}
int SizeOfArrStr(char **arrOfStr, int count)
{
int size = 0;
for (int pos = 0; pos < count; ++pos)
{
size += LengthOfWord(*arrOfStr);
++arrOfStr;
}
return size;
}
char *EquallyStr(char *resulStr, char *arrOfStr)
{
while(*arrOfStr)
{
*resulStr = *arrOfStr;
++resulStr; ++arrOfStr;
}
return resulStr;
}
char *SummOfStr(char **arrOfStr, int count)
{
char *resultArr = new char[SizeOfArrStr(arrOfStr, count) + 1];
resultArr[SizeOfArrStr(arrOfStr, count)] = '\0';
char *arr = resultArr;
for (int pos = 0; pos < count; ++pos)
{
EquallyStr(arr, *arrOfStr);
arr = EquallyStr(arr, *arrOfStr);
++arrOfStr;
}
return resultArr;
}
char *SearchMinStr(char *str1, char *str2)
{
if (LengthOfWord(str1) <= LengthOfWord(str2))
return str1;
return str2;
}
bool IsEqualStr(char *str1, char *str2)
{
if (LengthOfWord(str1) != LengthOfWord(str2))
return false;
while (*str1)
{
if (*str1!=*str2)
return false;
++str1; ++str2;
}
return true;
}
int Compare(char *str1, char *str2)
{
while (*str1)
{
if (*str1 < *str2)
return -1;
if (*str1 > *str2)
return 1;
if (*str2 == 0)
return 1;
++str1; ++str2;
}
return -1;
}
int CompareOfStr(char *str1, char *str2)
{
if (IsEqualStr(str1, str2))
return 0;
return Compare(str1, str2);
}
char *MaxElem(char **arrOfStr, int count)
{
char *maxElem = *arrOfStr;
for (int elem = 0; elem < count; ++elem)
{
if (CompareOfStr(maxElem, *arrOfStr) == -1)
maxElem = *arrOfStr;
++arrOfStr;
}
return maxElem;
}
template <>
char **NewArr (char **arrOfStr, int count)
{
char **newArr = new char *[count + 2];
for (int pos = 0; pos < count; ++pos)
{
newArr[pos] = new char[LengthOfWord(arrOfStr[pos]) + 1];
newArr[pos] = arrOfStr[pos];
}
newArr[count] = MaxElem(arrOfStr, count);
newArr[count + 1] = SummOfStr(arrOfStr, count);
return newArr;
}
и прототип функции для char * :
template <> char **NewArr (char **arrOfStr, int count);
итак вопрос : где ошибка в реализации специализации шаблона ? вот что говорит компилятор Error 1 error LNK2001: unresolved external symbol "char * * __cdecl NewArr(char * *,int)" (??$NewArr@PAD@@YAPAPADPAPADH@Z)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно сделать, чтобы на странице, где расположено видео с YoutubeКак сделать, чтобы кнопка появлялась в заданое время от не загрузки страницы...
Есть 2 календаря от bootstrap 3, нужно чтобы при выборе 2 дат, было выбрано не меньше 3 дней, при первом старте как вывеси получилось, а вот при изменении...
Всем доброго времени!