温馨提示×

Linux C++怎么用STL

小樊
51
2026-07-17 09:26:05
栏目: 编程语言

Linux 下使用 C++ 的 STL(Standard Template Library),其实和平台关系不大,只要用 支持 C++ 的编译器(如 g++ / clang++) 即可。下面从 环境、基本用法、常见容器与算法、编译方式 几个方面说明。


一、Linux 下准备环境

1. 安装编译器(如果没有)

sudo apt update
sudo apt install g++   # Debian/Ubuntu

查看版本:

g++ --version

二、最简单的 STL 示例

示例:使用 vector + sort

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {3, 1, 4, 1, 5};

    std::sort(v.begin(), v.end());

    for (int x : v) {
        std::cout << x << " ";
    }
    std::cout << std::endl;

    return 0;
}

编译运行

g++ -std=c++11 stl_demo.cpp -o stl_demo
./stl_demo

推荐开启 C++11 或更高标准

-std=c++11 / c++14 / c++17 / c++20

三、常用 STL 容器

1. vector(动态数组)

#include <vector>

std::vector<int> v;
v.push_back(10);
v.push_back(20);

v[0] = 100;

常用接口:

  • push_back
  • size()
  • empty()
  • clear()
  • 迭代器:begin(), end()

2. map(红黑树,有序)

#include <map>

std::map<std::string, int> m;
m["apple"] = 3;
m["banana"] = 5;

for (auto &p : m) {
    std::cout << p.first << ": " << p.second << std::endl;
}

3. unordered_map(哈希表,无序)

#include <unordered_map>

std::unordered_map<std::string, int> um;
um["a"] = 1;

4. set / unordered_set

#include <set>

std::set<int> s = {1, 2, 3};
s.insert(4);

5. string

#include <string>

std::string s = "hello";
s += " world";

四、STL 算法(<algorithm>

常用算法

#include <algorithm>
功能 示例
排序 std::sort(v.begin(), v.end())
查找 std::find(v.begin(), v.end(), x)
最大/最小 std::max, std::min
遍历 std::for_each

示例:

auto it = std::find(v.begin(), v.end(), 3);
if (it != v.end()) {
    std::cout << "found" << std::endl;
}

五、迭代器(Iterator)

for (auto it = v.begin(); it != v.end(); ++it) {
    std::cout << *it << " ";
}

或现代写法:

for (auto &x : v) {
    std::cout << x << " ";
}

六、Makefile 示例(Linux 常用)

CXX = g++
CXXFLAGS = -std=c++17 -Wall

all: app

app: main.o
	$(CXX) -o app main.o

main.o: main.cpp
	$(CXX) $(CXXFLAGS) -c main.cpp

clean:
	rm -f *.o app

七、调试 STL(Linux)

1. 使用 gdb

g++ -g main.cpp -o main
gdb ./main

2. 打印 STL 容器(gdb 新版本支持)

p v
p m

八、常见坑(Linux C++)

  1. 忘记 std::
    using namespace std; // 不推荐在头文件中使用
    
  2. 迭代器失效
    • vector 插入/删除可能导致迭代器失效
  3. map vs unordered_map
    • map 有序,慢
    • unordered_map 快,无序

九、学习建议

✅ 推荐顺序:

  1. vector
  2. string
  3. map / unordered_map
  4. algorithm
  5. 迭代器 + lambda

如果你愿意,我可以:

  • ✅ 给你 Linux 下 STL 实战项目示例
  • ✅ 专门讲 STL 容器对比与性能
  • ✅ 讲 STL 在系统编程 / 网络编程中的用法

你现在是 初学者 / 进阶 / 准备面试

0