Прежде всего, я не могу понять структуру стандартной библиотеки C++ или std. Например, «Привет, мир!» Программа выглядит следующим образом:Когда я должен использовать свои собственные пространства имен?
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
}
Более сложная программа для генерации случайных чисел и время выполнения Assesment выглядит следующим образом:
#include <iostream>
#include <random>
#include <chrono>
#include <time.h>
int main() {
std::chrono::time_point<std::chrono::system_clock> start, end;
std::tr1::default_random_engine eng(static_cast<unsigned int>(time(NULL)));
std::tr1::uniform_int<int> unif(0, 99);
start = std::chrono::system_clock::now();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
std::cout << unif(eng) << " ";
}
std::cout << std::endl;
}
end = std::chrono::system_clock::now();
int elapsed_milliseconds = std::chrono::duration_cast<std::chrono::milliseconds> (end - start).count();
std::cout << "Elapsed time: " << elapsed_milliseconds << "ms" << std::endl;
std::cin.get();
return 0;
}
По моему коду мнения так:
std::tr1::uniform_int<int> unif(0, 99);
или это :
std::chrono::time_point<std::chrono::system_clock> start, end;
выглядит очень уродливо. Конечно, я могу использовать что-то вроде этого:
using namespace std;
using namespace std::tr1;
using namespace std::chrono;
Но этот код может вызвать некоторые проблемы: Why is "using namespace std" considered bad practice?
Я не могу понять причину создания вложенных пространств имен в библиотеке Standrad. Это только одна причина, связанная с конфликтами функций имени? Или что-то другое?
И для моего собственного проекта, когда я должен использовать свои собственные пространства имен?
Если вы используете C++ 11, вам не нужен 'std :: tr1', поскольку был включен [TR1] (https://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1). – rici
@rici да, он работает без 'std :: tr1'. Я этого раньше не знал. –