sort(v.begin(), v.end());
встречающийся в программе sortl.cpp, будет работать, если мы в программе заменим всюду vector на deque, но не на list. Более подробно - см. раздел 1.9.
Инициализация контейнеров
Как известно каждому программисту на С(++), определение массива может содержать список начальных значений. Например, мы можем написать
int a[3] = {10, 5, 7}; int b[] = {8, 13};
// эквивалентно int b[2] = {8, 13}; int c[3] = {4};
// эквивалентно int с[3] = {4, 0, 0};
Инициализация также возможна и для трех других типов последовательных контейнеров, как показано в следующем примере:
int a[3] = {10, 5, 7}; vector<int> v(a, a+3); deque<int> w(a, a+3); list<int> x(a, a+3);
Но не только массив, а также и вектор, двусторонняя очередь или список могут служить основой для инициализации контейнера того же типа. Например, если мы продолжим этот пример строчкой
vector<int> vl (v.beginf) , v.endO);
вектор vl станет идентичен вектору v, оба будут состоять из трех элементов типа int, 10, 5 и 7. Этот пример откомпилируется, поскольку v и vl относятся к одному типу - vector<int>. Напротив, следующий пример не будет компилироваться, поскольку мы не можем использовать значения списках для инициализации вектора vl1:
vector<int> vl(x.begin(), x.end());
Ясно, что этот способ инициализации обеспечивается конструкторами контейнерных классов. Кроме этого, существуют конструкторы, принимающие в качестве параметра целое, означающее желаемый размер,
В окончательном стандарте C++ нет этого ограничения, поэтому приведенный пример должен откомпилироваться без ошибок на более позднем компиляторе, но рассматриваемые автором компиляторы VC5 и ВС5 основываются на раннем варианте стандарта языка, который не поддерживает версии STL, позволяющие инициализировать контейнер одного типа элементами контейнера другого типа (за исключением массива). - Прим. переводчика.
и необязательный параметр, задающий значение для элементов, содержащихся во вновь созданном контейнере. Например, мы можем написать
vector<int> v(5, 8) // Пять элементов, все они равны 8. или
vector<int> v(5);
В последнем случае вектор v будет содержать пять элементов. Эта форма записи удобна в том случае, когда мы хотим присвоить значения элементам позже, как в примере из раздела 1.6.
<< назад вперед >>