C++ <vector> front 函数
在 vector 的各种操作中,front 是一个非常简单的函数,用于获取第一个元素。
front 是容器类的成员函数,用于返回容器的第一个元素。它相当于 at(0) 或 operator[](0),但语义更清晰。
front 提供了直观的方式来访问容器的首元素。
单词释义: front 表示"前面",即获取第一个(最前面的)元素。
基本语法与参数
front 是容器类的成员函数,调用它非常直接,不需要任何参数。
语法格式
reference front(); const_reference front() const;
参数说明
- 参数: 无参数
front不接受任何参数。
函数说明
- 返回值: 返回容器第一个元素的引用。如果容器是常量容器,则返回常量引用。
- 效果: 返回容器的第一个元素(索引 0 处的元素)。
- 注意: 调用
front前应确保容器不为空,否则行为是未定义的。建议先使用empty()或size() > 0检查。
实例
让我们通过一系列例子,彻底掌握 front 的用法。
示例 1:基础用法 - 获取第一个元素
实例
#include <iostream>
#include <vector>
int main() {
// 1. 创建一个 vector 并添加一些元素
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "vector的大小是: " << 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;
}
#include <vector>
int main() {
// 1. 创建一个 vector 并添加一些元素
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "vector的大小是: " << 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
代码解析:
numbers.front()返回第一个元素10。- 它与
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;
}
#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()返回的是可修改的左值引用。
示例 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;
}
#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("用户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;
}
#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("用户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>