Форум программистов, компьютерный форум CyberForum.ru

Странное поведение функции работы с массивом(шаблон) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ При подсчёте косинуса компилятор выдаёт неверное значение http://www.cyberforum.ru/cpp-beginners/thread258047.html
И снова здравствуйте,возникла очередная проблема в моей программе,при элементарном подсчёте косинуса компилятор выдаёт неверное значение,даю весь код чтобы не спрашивали,что и откуда берётся....проблема в последней функции в извлечении косинуса #include<iostream.h> #include<math.h> #include<conio.h> float a={-0.3,0.1,-0.1,0.2,0.3,-0.1}; float x1={0.7,0.6,-0.4}; float modul (float...
C++ Ввод константы Имеется массив. Нужно чтоб пользователь вводил его размер, но для этого нужно чтоб переменная была константой. Вопрос как сделать так чтоб пользователь константу вводил? cout<<"Введите колличество элементов в массиве"; cin>> z; z++; int arrive; Не работает http://www.cyberforum.ru/cpp-beginners/thread258045.html
C++ коэффициент пропорциональности
Создайте программу, которая вычисляет коэффициент пропорциональности (aspect ratio) экрана вашего компьютера по заданным значениям ширины и высоты в пикселях, используя следующие операторы: int width = 1280; int heidht =1024; double aspect = width / height;
C++ Lab4 вступ в C++
Скорость первого автомобиля V1 км / ч, второго - V2 км / ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили сначала движутся навстречу друг другу. Для C++
C++ бинарное дерево http://www.cyberforum.ru/cpp-beginners/thread258003.html
В общем у меня есть двоичное дерево поиска с включением, сделаны функции создания узла\дерева, поиска, и обхода. никак не получается дописать следующее: 1)поменять тип данных на строку символов 2)сделать функцию нахождения в дереве узла с заданным значением ключевого признака 3)сделать функцию определения максимальной глубины дерева 4)сделать функцию определения кол-ва узлов и листьев дерева...
C++ Двумерный массив.Мах и Мин поменять местами... Здравствуйте! Написать программу которая создает матрицу a*b. Найти максимальный элемент.И поменять их в массиве местами вывести массив. Помогите доделать и исправить ошибки. Чтото не так с min не пойму....и саму перестановку min b max не понимаю. #include "stdafx.h" #include "iostream" #include <conio.h> #include <stdlib.h> подробнее

Показать сообщение отдельно
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
16.03.2011, 09:58     Странное поведение функции работы с массивом(шаблон)
Ты используешь C++, поэтому можно применить контейнер list и его метод unique (правда в этом случае массив нужно будет отсортировать). И для изменения твоего исходного указателя на массив нужно именно его и менять. См. код.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void szhatie(T** masp,unsigned &size)
{
  T * mas = *masp;
  list<T> mylist (mas, mas + size);
  mylist.sort();
  mylist.unique();           
  delete[] *masp;
  mas = new T[size = mylist.size()];
  int i = 0;
//  cout << "mylist:";
  for (list<T>::iterator it=mylist.begin(); it!=mylist.end(); ++it){
    mas[i++] = *it;
//  cout << " " << *it;
  }
//  cout << endl;
  *masp = mas;
}
А твоя функция соответственно будет выглядеть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void szhatie(T** masp,unsigned &size)
{
        T* mas = *masp;
        int s=size,q=size;
        T *temp=new T[size];
        for(unsigned i=0;i<size;i++)
        {
                temp[i]=mas[i];
                for(unsigned j=i+1;j<size;j++)
                {
                        if(mas[i]==mas[j])
                        {
                                q--;
                                break;
                        }
                }
        }
        size=q;
        delete[] *masp;
        mas=new T[size];
        unsigned index=0;
        for(unsigned i=0;i<s,index<size;i++)
        {
                bool a=true;
                for(unsigned j=0;j<i;j++)
                {
                        if(temp[i]==temp[j])
                        {
                                a=false;
                                break;
                        }
                }
                if(a)
                {
                        mas[index++]=temp[i];
                }
        }
 
        delete[]temp;
        *masp = mas;
//      for(int i=0;i<size;i++)
//      {
//              cout<<"Element"<<mas[i]<<endl;
//      }
}
 
Текущее время: 17:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru