манипулирование данными — векторное использование c ++ в качестве разделяемой переменной

все!

Я пытался найти в уже существующей теме об этом, но не смог найти. Если вы знаете, кто отвечает на мой вопрос, пожалуйста, поделитесь им.

Ну, вот моя проблема.
Я пишу программу, в которой каждый объект хранит всю информацию относительно себя в переменных внутри своего класса (например, std :: vector).
К сожалению, поскольку я использую библиотеку, разработанную другими людьми, некоторые операции могут быть выполнены только с одним std :: vectors. Таким образом, я нашел способ «решить» проблему — сложить все отдельные векторы внутри каждого объекта в большой std :: vector, затем обработать этот «стек» и, наконец, «разделить» обновленную информацию обратно внутри каждого объекта.

Мой первый подход к суммированию информации состоял в том, чтобы выделить новый пустой std :: vector и затем, пройдя через весь объект, push_back всю информацию в каждом отдельном векторе. Вместо этого для создания стека я создал новый пустой субвектор, прошел через стек, отодвинул нужную мне информацию и затем назначил субвектор связанному телу.

Чтобы попытаться ускорить процесс, я подумал, что мог бы использовать функции std :: vector.insert и std :: copy.
К сожалению, это, похоже, еще больше замедлило всю программу.

Итак, знаете ли вы какой-нибудь способ, который мог бы помочь мне ускорить выполнение моего кода?

Пример:

class MyObject
{
protected:
std::vector m_vector;
unsigned int m_vector_begin;
unsigned int m_vector_end;

public:
MyObject(std::vector &vector)
{
m_vector = vector;
}

~MyObject();

std::vector get_vector()
{
return m_vector;
}

void set_vector(std::vector &vector)
{
m_vector = vector;
}

void set_vector_begin(unsigned int &index)
{
m_vector_begin = index;
}

unsigned int get_vector_begin()
{
return m_vector_begin;
}

// same for m_vector_end
};class MyManipulator
{
protected:
std::vector<MyObject*> m_obj_list;

public:
MyManipulator(std::vector<MyObject*> &obj_list)
{
m_obj_list = obj_list;
}

~MyManipulator();

std::vector build_stack()
{
std::vector stack, array;

for(unsigned int index_obj = 0; index_obj < m_obj_list.size(); ++index_obj)
{
array = m_obj_list[index_obj]->get_vector();

m_obj_list[index_obj]->set_vector_begin(stack.size());
stack.insert(stack.end(), array.begin(), array.end());
m_obj_list[index_obj]->set_vector_end(stack.size());
}
return stack;
}

void unstack_vector(std::vector &stack)
{
std::vector array;

for(unsigned int index = 0; index < m_obj_list.size(); ++index)
{
array = std::vector(stack.begin()+m_obj_list[obj_index]->get_vector_begin(),
stack.begin()+m_obj_list[obj_index]->get_vector_end());

m_obj_list[obj_index]->set_vector(array);
}
}

void do_some_stuff(std::vector &input, std::vector &output)
{
unstack_vector(input);

// Does operations with the information saved in
// the objects and builds output
}
};int main
{
std::vector<MyObject*> obj_list;

std::vector vect_ini;
// initialise vect_ini

MyObject* Obj1 = new MyObject*(vect_ini);
obj_list.push_back(Obj1);

// change values to vect_ini

MyObject* Obj2 = new MyObject(vect_ini);
obj_list.push_back(Obj2);

MyManipulator* Manip = new MyManipulator(obj_list);

std::vector stack_in  = Manip->build_stack();
std::vector stack_out = std::vector(stack_ini.size());

for(unsigned int index_loop = 0; index_loop < N; ++index_loop)
{
Manip->do_some_stuff(stack_in, stack_out);

stack_in = stack_out;
}

return 0;
};

надеюсь, это поможет

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector