Я ищу несколько советов о том, как организовать мой код на C++.Организация кода C++
У меня есть массив int, который я бы хотел быть статичным в том смысле, что его значение поддерживается постоянным между вызовами. Это связано с тем, что моя функция foo() рекурсивно изменяет ребро массива и поэтому я не хочу, чтобы копии были сделаны из стороны. Кроме того, размер стороны может быть определен только во время компиляции из размера вектора, который передается в функциональную панель().
Я подумал о следующей структуре, чтобы макет такой проблемы.
Я сохраняю глобальный указатель внутри, который я затем могу использовать, чтобы указать на адрес моего массива int, а затем использовать указатель * side внутри foo для внесения изменений.
Просьба сообщить вам, пожалуйста, о компоновке и организации этого кода? Я совершенно новичок в C++, поэтому буду признателен за любые советы по нижерасположенной структуре.
#include <iostream>
#include <vector>
using namespace std;
int *side;
class A {
public:
int foo(bool);
int bar(vector<int>);
void set_n(int n){ class_n = n;};
private:
int class_n;
};
int A::foo(bool fl)
{
int n = class_n;
for(int i = 0; i < n; i++) {
// modify side[] and then recursively call foo
}
return 0;
}
int A::bar(vector<int> t)
{
int size = t.size();
set_n(size);
int a = foo(true);
int *side_local = new int[size];
for(int i = 0; i < size; i++) {
side_local[i] = 0;
}
side = side_local;
return 0;
}
int main()
{
A a;
vector<int> t = {1, 2, 3};
a.bar(t);
return 0;
}
Почему вы включили '', но не использовали его здесь:' int * side_local = new int [size]; '? Почему не просто 'std :: vector side_local (size);'? Или просто просто 'side.resize (size);' и не делать какой-либо из этого кода? –
PaulMcKenzie
Это зависит от контекста, и вы ничего не даете. Что такое массив, который должен представлять? Связано ли это с А? Должен ли он принадлежать A? Почему бы не использовать вектор? Вы не будете делать копии, передавая ссылку или указатель вокруг ... – Nelfeal