C++ <vector> функция front

класс контейнера C++ <vector>


Среди различных операций vector,frontявляется очень простой функцией, используемой дляПолучить первый элемент。

frontявляется функцией-членом класса контейнера, используемой длявозвращает первый элемент контейнера. Это эквивалентноat(0)илиoperator[](0), но семантика яснее.

frontон предоставляет интуитивно понятный способ доступа к первому элементу контейнера.

Определения слов: frontОзначает "front", то есть получает первый (самый передний) элемент.


Базовый синтаксис и параметры

frontЭто функция-член классов контейнеров, и её вызов очень прост — не требует никаких параметров.

Формат синтаксиса

reference front();
const_reference front() const;

Описание параметра

  • Параметр: Нет параметров
    • frontне принимает никаких аргументов.

Описание функции

  • Возвращаемое значение: возвращает первый элемент контейнераСсылкаЕсли контейнер является const-контейнером, возвращается const-ссылка.
  • ДействиеВозвращает первый элемент контейнера (элемент с индексом 0).
  • Примечание: вызовfrontПеред его использованием убедитесь, что контейнер не пуст; иначе поведение не определено. Рекомендуется сначала использоватьempty()илиsize() > 0Проверьте.

Пример

Давайте тщательно освоим его с помощью серии примеров.frontИспользование.

Пример 1: Базовое использование — получение первого элемента

Пример

#include <iostream>
#include <vector>

int main() {
    // 1. Создайте вектор и добавьте несколько элементов
    std::vector<int> numbers = {10, 20, 30, 40, 50};

    std::cout << "Размер вектора: " << numbers.size() << std::endl;

    // 2. Используйте front для получения первого элемента
    std::cout << "Первый элемент (front): " << numbers.front() << std::endl;
    std::cout << "Использование at(0): " << numbers.at(0) << std::endl;
    std::cout << "Использование [0]: " << numbers[0] << std::endl;

    return 0;
}

Ожидаемый результат выполнения:

vector的大小是: 5
第一个元素 (front): 10
使用 at(0): 10
使用 [0]: 10

Анализ кода:

  1. numbers.front()Возвращает первый элемент10。
  2. Он иnumbers.at(0)иnumbers[0]возвращает то же значение, но с более ясной семантикой.

Пример 2: Изменение значения первого элемента

frontОн возвращает ссылку, поэтому его можно использовать для изменения значения элемента.

Пример

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> names = {"Alice", "Bob", "Charlie"};

    std::cout << "Перед изменением первый элемент: " << names.front() << std::endl;

    // Используйте front(), чтобы получить ссылку и изменить элемент
    names.front() = "Andrew";

    std::cout << "После изменения первый элемент: " << names.front() << std::endl;

    // Теперь содержимое names: Andrew, Bob, Charlie

    return 0;
}

Ожидаемый результат выполнения:

修改前,第一个元素: Alice
修改后,第一个元素: Andrew

Анализ кода:

  • names.front() = "Andrew";Значение первого элемента было изменено через ссылку.
  • front()возвращает изменяемую lvalue-ссылку.

Пример 3: Безопасное использование front — проверка, пуст ли контейнер

При использованииfrontПеред этим следует сначала проверить, пуст ли контейнер.

Пример

#include <iostream>
#include <vector>

void printFront(const std::vector<int>& v) {
    if(!v.empty()) {
        std::cout << "Первый элемент: " << v.front() << std::endl;
    }
    else {
        std::cout << "Контейнер пуст, невозможно получить первый элемент" << std::endl;
    }
}

int main() {
    std::vector<int> numbers = {10, 20, 30};

    // Обычный случай
    printFront(numbers);

    // Случай с пустым контейнером
    std::vector<int> emptyVec;
    printFront(emptyVec);

    return 0;
}

Ожидаемый результат выполнения:

第一个元素是: 10
容器为空,无法获取第一个元素

Анализ кода:

  • !v.empty()проверяет, не пуст ли контейнер.
  • При вызовеfrontПроверка перед использованием может помочь избежать неопределённого поведения.

Пример 4: Использование front для реализации начала очереди

frontЭто можно использовать для реализации структур данных, подобных очереди.

Пример

#include <iostream>
#include <vector>
#include <string>

class SimpleQueue {
private:
    std::vector<std::string> data;

public:
    // Постановка в очередь
    void enqueue(const std::string& item) {
        data.push_back(item);
    }

    // Извлечение из очереди (удаление первого элемента)
    void dequeue() {
        if(!data.empty()) {
            // Удалить первый элемент, а следующие элементы сдвигаются вперед
            data.erase(data.begin());
        }
    }

    // Получить передний элемент
    std::string front() const {
        if(!data.empty()) {
            return data.front();
        }
        return "";
    }

    // Проверить, пуста ли очередь
    bool empty() const {
        return data.empty();
    }

    // Получить размер очереди
    size_t size() const {
        return data.size();
    }
};

int main() {
    SimpleQueue q;

    q.enqueue("User A");
    q.enqueue("Пользователь B");
    q.enqueue("Пользователь C");

    std::cout << "Размер очереди: " << q.size() << std::endl;

    while(!q.empty()) {
        std::cout << "Обработка: " << q.front() << std::endl;
        q.dequeue();
    }

    std::cout << "Очередь пуста" << std::endl;

    return 0;
}

Ожидаемый результат выполнения:

队列大小: 3
处理: 用户A
处理: 用户B
处理: 用户C
队列已清空

Анализ кода:

  • front()Используется для получения элемента из начала очереди (элемента, ожидающего обработки).
  • В этом примере показано, как использоватьfrontРеализуйте очередь, работающую по принципу «первым пришёл — первым вышел» (FIFO).

класс контейнера C++ <vector>

Другие расширения