C++ 在容器中存放函数指针
时间: 2023-07-15 19:15:46 浏览: 120
在C++中,可以使用STL容器来存放函数指针。具体方法如下:
1.使用std::function代替函数指针,因为std::function可以存储任意可调用对象,包括函数指针。
2.定义一个容器,比如std::vector<std::function<void()>>来存储函数指针。
3.将函数指针转换成std::function类型,并将其添加到容器中。
下面是一个简单的示例代码:
```c++
#include <iostream>
#include <vector>
#include <functional>
void foo() {
std::cout << "foo()" << std::endl;
}
void bar() {
std::cout << "bar()" << std::endl;
}
int main() {
std::vector<std::function<void()>> func_vec;
func_vec.push_back(&foo);
func_vec.push_back(&bar);
for (auto& func : func_vec) {
func();
}
return 0;
}
```
在上面的示例中,定义了一个存储函数指针的std::vector容器func_vec,并将两个函数指针foo和bar添加到容器中。然后使用for循环遍历容器中的函数指针,并调用它们。
相关问题
C++实现清理List链表中存放的指针
以下是C++实现清理List链表中存放的指针的示例代码:
```c++
#include <iostream>
#include <list>
using namespace std;
class Node {
public:
Node(int val) : val(val), next(nullptr) {}
~Node() {
delete next; // 清理 next 指针
next = nullptr;
}
int val;
Node* next;
};
int main() {
list<Node*> mylist;
// 添加节点到链表中
for (int i = 0; i < 5; i++) {
Node* node = new Node(i);
mylist.push_back(node);
}
// 清理链表中的指针
while (!mylist.empty()) {
Node* node = mylist.front();
mylist.pop_front();
delete node; // 释放节点内存
}
return 0;
}
```
在上述代码中,我们定义了一个 `Node` 类来表示链表节点,其中包含一个 `val` 成员变量和一个 `next` 指针。在 `Node` 的析构函数中,我们清理了 `next` 指针所占用的内存。在 `main` 函数中,我们通过 `list` 容器来管理节点,并在程序结束时清理链表中的所有指针。
c++中的resize函数
在C++中,`resize()` 函数是一个用于动态调整容器(如数组、向量、列表或集合等)大小的成员函数。它主要用于改变容器能容纳的元素数量,同时可能会对内部数据结构进行相应的调整。当你希望在运行时增加或减少容器的容量,而不必创建新的容器并复制所有内容时,`resize()` 就非常有用。
基本的语法通常是这样的:
```cpp
container_type& resize(size_type new_size, const value_type& value = value_type());
```
- `container_type&`:返回的是一个引用到原容器对象本身,可以链式调用其他操作。
- `new_size`:新容器应具有的元素数量。如果设为0,通常会清空容器。
- `value`:当需要将新元素初始化为特定值时,可以指定这个默认值。对于数组和某些自定义容器,如果没有提供,默认可能是0或者空指针。
示例:
```cpp
std::vector<int> vec;
vec.resize(5); // 如果内部是动态分配的内存,这会扩充空间到能存放5个元素
vec.resize(0); // 清空容器
std::list<char> lst;
lst.resize(10, 'A'); // 初始化新空间为'A'
```
阅读全文