Я рекомендую использовать glob
с этой повторно используемой оболочкой. Он генерирует vector<string>
, соответствующий путям файлов, которые соответствуют шаблону glob:
#include <glob.h>
#include <vector>
using std::vector;
vector<string> globVector(const string& pattern){
glob_t glob_result;
glob(pattern.c_str(),GLOB_TILDE,NULL,&glob_result);
vector<string> files;
for(unsigned int i=0;i<glob_result.gl_pathc;++i){
files.push_back(string(glob_result.gl_pathv[i]));
}
globfree(&glob_result);
return files;
}
, который затем можно вызвать с обычным шаблоном шаблона системы, например:
vector<string> files = globVector("./*");
Где Вы находили этот неправильный абзац? Это, кажется, о 2's дополнение, но имеет -1
в неправильном месте.
Для реализаций C с помощью поразрядного дополнения до единицы или целых чисел со знаком знака/величины, диапазон симметричен вокруг нуля (с 2 комбинациями двоичных разрядов, что и представить 0
, таким образом, положительный диапазон и отрицательный диапазон являются тем же размером).
В основном ничто никогда не использует это в эти дни, но стандарт ISO C указывает, что целые числа со знаком являются двоичными и используют или дополнение two, поразрядное дополнение до единицы или знак/величину.
<час> комбинация двоичных разрядов со всем набором битов представляет -1
, потому что sum(2^i, i=0..n-1)
один меньше чем 2^n
.
С [1 117] только [1 117] набор знакового бита, мы получаем больше-всего-отрицательное-число : -INT_MIN
подписывается переполнение (неопределенное поведение), потому что это не является представимым как int
; это требует более широкого целого числа. Или с обертыванием, -INT_MIN = INT_MIN
. Это "2's дополнительная аномалия". https://en.wikipedia.org/wiki/Two%27s_complement#Most_negative_number
можно постараться не расширяться при выполнении операции абсолютного значения: например,
unsigned abs = i >= 0 ? i : -(unsigned)i;
(Преобразование отрицательной величины к [1 111] в C имеет четко определенное поведение сокращения модуля, пока это не находится в представимом диапазоне. В C это независимо от кодирования целого числа со знаком; то, что имеет значение, значение . Так (uint8_t)-1
всегда 255. Для 2's дополняют, это просто копирует комбинацию двоичных разрядов. Для знака/величины или поразрядного дополнения до единицы реализация C должна была бы сделать некоторую математику для кастинга от со знаком до со знаком. Заметьте, что я сделал это прежде отрицание, что означает 0 - i
с обычным неподписанным обертыванием.)