C++中容器之总结篇
C++标准库提供了多种容器,包括数组、向量、列表、栈、队列、映射表等等。每种容器都有其特有的用途和性能上的差异,选择合适的容器可以保证程序的高效性和正确性。
在本篇攻略中,我们将对C++中的容器进行分类总结,并根据使用场景给出相应的建议和示例。
1. 顺序容器
1.1 数组(array)
数组是一种固定大小的存储元素的容器。在定义数组时必须指定数组大小,而且一旦定义大小就无法改变。
可以通过下标访问数组元素,例如:a[2]
表示访问数组a
的第3个元素。
示例:
#include <array>
#include <iostream>
int main() {
std::array<int, 5> arr{1, 2, 3, 4, 5};
for (int i = 0; i < arr.size(); i++) {
std::cout << arr[i] << " ";
}
// output: 1 2 3 4 5
return 0;
}
1.2 向量(vector)
向量是一种动态大小的存储元素的容器。可以通过push_back()
方法在向量末尾添加元素,通过pop_back()
方法移除末尾元素。
可以通过下标访问向量元素,例如:v[2]
表示访问向量v
的第3个元素。
示例:
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec{1, 2, 3, 4, 5};
vec.push_back(6);
vec.pop_back();
for (int i = 0; i < vec.size(); i++) {
std::cout << vec[i] << " ";
}
// output: 1 2 3 4 5
return 0;
}
1.3 列表(list)
列表是一种双向链表结构的存储元素的容器。可以在容器任意位置插入或移除元素,不受插入或移除操作的影响。
可以通过迭代器访问列表元素,例如:std::list<int>::iterator it = li.begin();
表示获取列表li
的第一个元素迭代器。
示例:
#include <list>
#include <iostream>
int main() {
std::list<int> li{1, 2, 3, 4, 5};
li.push_back(6);
li.push_front(0);
li.pop_front();
std::list<int>::iterator it = li.begin();
for (; it != li.end(); it++) {
std::cout << *it << " ";
}
// output: 1 2 3 4 5 6
return 0;
}
2. 关联容器
2.1 集合(set)
集合是一种存储唯一元素的容器,不允许重复元素存在。可以通过insert()
方法向集合添加元素,通过erase()
方法移除元素。
可以通过迭代器访问集合元素,例如:std::set<int>::iterator it = s.begin();
表示获取集合s
的第一个元素迭代器。
示例:
#include <set>
#include <iostream>
int main() {
std::set<int> s{1, 2, 3, 4, 5};
s.insert(6);
s.erase(3);
std::set<int>::iterator it = s.begin();
for (; it != s.end(); it++) {
std::cout << *it << " ";
}
// output: 1 2 4 5 6
return 0;
}
2.2 映射表(map)
映射表是一种存储键值对的容器,每个键唯一对应一个值。可以通过insert()
方法向映射表添加键值对,通过erase()
方法移除键值对。
可以通过下标访问映射表元素,例如:m["a"]
表示访问映射表m
中键值为"a"
的元素。
示例:
#include <map>
#include <iostream>
int main() {
std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
m.insert({"d", 4});
m.erase("b");
std::cout << m["c"] << " " << m["d"] << std::endl;
// output: 3 4
return 0;
}
3. 适配器容器
3.1 栈(stack)
栈是一种后进先出(LIFO)的容器。可以通过push()
方法向栈顶添加元素,通过pop()
方法从栈顶移除元素。
可以通过top()
方法访问栈顶元素。
示例:
#include <stack>
#include <iostream>
int main() {
std::stack<int> s;
s.push(1);
s.push(2);
s.push(3);
std::cout << s.top() << std::endl; // output: 3
s.pop();
std::cout << s.top() << std::endl; // output: 2
return 0;
}
3.2 队列(queue)
队列是一种先进先出(FIFO)的容器。可以通过push()
方法向队列尾添加元素,通过pop()
方法从队列头移除元素。
可以通过front()
方法访问队列头元素,通过back()
方法访问队列尾元素。
示例:
#include <queue>
#include <iostream>
int main() {
std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);
std::cout << q.front() << std::endl; // output: 1
std::cout << q.back() << std::endl; // output: 3
q.pop();
std::cout << q.front() << std::endl; // output: 2
return 0;
}
总的来说,选择合适的容器可以使程序更加高效和简洁,但也需要结合具体场景进行选择。以上就是C++中容器的总结,希望本篇攻略能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++中容器之总结篇 - Python技术站