Я реализую quickSort, используя собственное пространство имен alg
.Статическая переменная из пространства имен не увеличивается
namespace alg
{
static unsigned int comparisons(0);
void quickSort (std::vector<int>& a);
int partition (std::vector<int>& b, int leftIndex);
}
мне нужно подсчитать сравнение элементов в массиве, по этой причине я использую статическую переменную comparisons
, который получает приращение функций, но в main.cpp
она по-прежнему остается 0.
Что не так? Почему в main.cpp я предполагаю, что для каждого файла .cpp
существует статическая переменная serapate comparisons
, но я не уверен. Во всяком случае, как я могу это исправить? Мне действительно нужно написать класс, где я могу хранить статическую переменную? Или это все равно не поможет?
И предложите, где я могу найти подробную информацию о статических переменных и пространствах имен?
QuickSort.cpp
void alg::quickSort(std::vector<int>& a)
{
....
comparisons+=1;
}
int alg::partition(std::vector<int>& a, int leftIndex)
{
comparisons+=a.size()-1;
....
}
main.cpp
alg::quickSort(myvec);
...
std::cout << alg::comparisons << std::endl;
Возможно, вам захочется показать строки, изменяющие переменную и использующие ее. Глобальная переменная сохраняет свои значения. BTW, ** намного лучший подход к подсчету операций, которые он передал в функции сравнения как объект функции, и которые содержат счетчик, используя, например, указатель на локальную переменную в 'main()': глобальные переменные Плохо. –
«Я думаю, для каждого .cpp-файла есть статические сопоставления по сравнению с serapate, но я не уверен. В любом случае, как я могу это исправить?». Удалить статические – deviantfan