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

Не могу понять, как правильно передать указатель на объект в файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чтение входных данных размером больше чем 4096 символов http://www.cyberforum.ru/cpp-beginners/thread1108487.html
Даны такие условия задачи, что входные данные введенные с клавиатуры (из файла) могут достигать 10 000 символов их надо соответственно обработать. Когда размер входных данных равен от 5 000 до 10 000 символов, считываются не все, а только первых 4096 символов. Считывание данных введенных с консоли я делаю таким образом: string* str=new string; //считанные строки. //... for (int i=0; i<k; i++)...
C++ Рекурсивная функция рисования кривой Помогите перевести код: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type http://www.cyberforum.ru/cpp-beginners/thread1108464.html
C++ Реализация одно-х списков классами
Добрый день! Расскажите пожалуйста, как эту задачу можно написать с помощью классов. L – линейный однонаправленный список Проверить, упорядочены ли элементы списка по алфавиту.
C++ ООП. Метод считывания текста с PDF файла
Напишите пожалуйста метод считывания текста с PDF файла. Очень нужно, помогите пожалуйста!
C++ Ссылка на объект, возвращаемый функцией http://www.cyberforum.ru/cpp-beginners/thread1108457.html
Безопасно ли подобное? typedef std::vector< string > vec; vec someFoo(); vec someBoo() { // что-то делаем vec & x = someFoo(); // что-то делаем с вектором 'x', удаляем некоторые элементы return x;
C++ Утилита сбора информации о системе Доброго времени суток. Хочу написать Утилиту сбора информации о системе на C++, для интерфейса буду использовать библиотеку SDL. Стоит ли использовать именно эти средства для написания такого проекта или есть варианты получше? Посоветуйте на какие темы в изучении следует сделать упор, какие библиотеки использовать и, возможно, какую литературу на эти темы можно было бы почитать. Заранее... подробнее

Показать сообщение отдельно
pihta
1 / 1 / 0
Регистрация: 11.11.2012
Сообщений: 23
01.03.2014, 17:37     Не могу понять, как правильно передать указатель на объект в файл
Есть вектор v, который надо отсортировать. Есть класс MergeSort, который это должен делать, он содержит в качестве параметра указатель на вектор. Т.е. я хотел сделать так, что за конкретным объектом класса закреплялся бы навсегда конкретный вектор, и вызывая элемент-функцию .sort(), всегда можно было бы отсортировать закрепленный за классом вектор. Но вот не задача, если поменять вектор, и после этого вызвать упомянутую выше ф-ию, то она ровным счетом ничего не делает. Почему так происходит, и как это исправить?

Вот собственно код:
main.cpp
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <cstdlib>
using std::rand;
using std::srand;
#include <vector>
using std::vector;
#include <ctime>
#include "MergeSort.h"
 
void printVector(const vector<int>&);
void fillVector(vector<int> &, int);
 
int main()
{
    vector<int> v;
 
    MergeSort object(v); // Tak ne sortiruet
    fillVector(v, 25);
    //MergeSort object(v); // A tak sortiruet
    printVector(v);
    object.sort();
    printVector(v);
    
    cin.get();
    return 0;
}
 
void fillVector(vector<int> &v, int size)
{
    srand( time(NULL) );
    for(int i=0; i < size; i++) 
        v.push_back( rand()%99 + 1);
}
 
void printVector(const vector<int> &v)
{
    for(int i=0; i < v.size(); i++)
        cout << v[i] << " ";
    cout << endl;
}
И сам класс:
MergeSort.h
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
#ifndef MERGESORT_H
#define MERGESORT_H
 
#include <vector>
using std::vector;
 
class MergeSort
{
    public:
        MergeSort(vector<int>&);
        ~MergeSort();
        
        void sort();
        
    private:
        vector<int> *v;
        vector<int> temp;
        int size;
 
        void merge(int, int, int, int);
        void sortSubVector(int, int);
};
 
#endif
И MergeSort.cpp
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "MergeSort.h"
 
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
#include <vector>
using std::vector;
 
MergeSort::MergeSort(vector<int> &vect)
:temp(vect.size())
{
    v = &vect;
    size = vect.size();
}
 
MergeSort::~MergeSort()
{
}
        
void MergeSort::sort()
{
    sortSubVector(0, size-1);
}
 
void MergeSort::sortSubVector(int low, int high)
{
    if( (high-low) >= 1)
    {
        int middle1 = (low + high)/2;
        int middle2 = middle1 + 1;
 
        sortSubVector(low, middle1);
        sortSubVector(middle2, high);
 
        merge(low, middle1, middle2, high);
    }
}
 
void MergeSort::merge(int low, int middle1, int middle2, int high)
{
    int leftIndex = low;
    int rightIndex = middle2; 
    int combInedindex = low;
 
    while( leftIndex <= middle1 && rightIndex <= high)
    {
        if( *(v->begin() + leftIndex) <= *(v->begin() + rightIndex) )
            temp[ combInedindex++ ] = *(v->begin() + leftIndex++);
        else
            temp[ combInedindex++ ] = *(v->begin() + rightIndex++);
    }
 
    if( leftIndex == middle2)
        while( rightIndex <= high)
            temp[ combInedindex++ ] = *(v->begin() + rightIndex++);
    else
        while( leftIndex <= middle1)
            temp[ combInedindex++ ] = *(v->begin() + leftIndex++);
 
    for(int i = low; i <= high; i++)
        *(v->begin() + i) = temp[ i ];
}
Добавлено через 6 минут
Описался в названии темы. Не в файл, а в класс конечно)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru