size()
говорит вам, сколько элементов у вас в данный момент. capacity()
говорит вам, насколько большим может быть размер, прежде чем вектор должен перераспределить память для себя.
Емкость всегда больше или равна размеру. Вы не можете индексировать дальше элемента # size()-1
.
Для операторов ассоциативность означает, что когда один и тот же оператор появляется в строке, то какое именно появление оператора мы применяем в первую очередь. Далее пусть Q
будет оператором
a Q b Q c
Если Q
является левоассоциативным, то он оценивается как
(a Q b) Q c
А если он правоассоциативен, то он оценивается как
a Q (b Q c)
Это важно, так как меняет значение выражения. Рассмотрим оператор деления с целочисленной арифметикой, который является левоассоциативным
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
. Если бы он был правоассоциативным, он оценил бы неопределенное выражение, так как вы бы делили на ноль
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
, это порядок оценки для операторов с одинаковым приоритетом. Порядок «ВЛЕВО НАПРАВО» или «ВПРАВО НАЛЕВО» имеет значение. Для
3 - 2 - 1
, если он СЛЕВА НАПРАВО, то он равен
(3 - 2) - 1
и равен 0. Если СЛЕВА НАПРАВО,
Существует три вида ассоциативности:
Ассоциативное свойство в математике
Порядок операций в языках программирования
Ассоциативное свойство в математике является свойством таких операторов, как сложение (+). Это свойство позволяет вам переставлять круглые скобки без изменения значения оператора, например:
(a + b) + c = a + (b + c)
В языках программирования ассоциативность (или фиксированность) оператора - это свойство, которое определяет, как операторы с одинаковым приоритетом группируются в отсутствие скобок; т.е. в каком порядке оценивается каждый оператор. Это может различаться между языками программирования.
В кэшах ЦП ассоциативность - это метод оптимизации производительности.
If you are referring to "operator associativity" - it is how a language determines how operators of the same precedence are grouped in the absence of parentheses.
For example, the + and - operators in C-based languages have the same precedence. When you write an expression that uses both of them (without parentheses) the compiler must determine what order to evaluate them in.
If you write 12 - 5 + 3, the possible evaluations include:
Depending on the order you evaluate the expression in, you can get different results. In C-based languages, + and - have left associativity, which means that the expression above would evaluate as the first case.
All language have strongly-defined rules for both precedence and associativity. You can learn more about the rules for C# here. The general concepts of operator associativity and precedence are well covered on wikipedia.
Я полагаю, вы имеете в виду ассоциативность операторов ...
Это порядок привязки операндов к оператору. В основном:
a - b + c
может быть оценено как (при условии, что - и + имеют одинаковый приоритет):
((a - b) + c) или,
(a - (b + c))
Если операторы левоассоциативны (сразу же связываются с левым операндом), он будет оценен как первый. Если они правильно ассоциативны, это будет оценено как второе.
В большинстве предыдущих примеров использовались константы. Если аргументы являются вызовами функций, порядок, в котором выполняются вызовы, может определяться правилами ассоциации, в зависимости, конечно, от вашего компилятора. И если у этих функций есть побочные эффекты ..
Если вы имеете в виду ассоциативность операторов:
Он определяет способ анализа выражений. Он дает стандарт, поэтому все выражения анализируются одинаково.
Это наиболее важно для операций с одинаковым прецедентом, когда могут быть побочные эффекты.
Мы все знаем, что приоритет важен, но такова ассоциативность в интерпретации значения выражения. Для действительно простого введения попробуйте Power of Operators .