C++ 在容器中存放函数指针
时间: 2023-07-15 17:15:46 浏览: 63
在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++中存放vector的vector
在C++中,可以使用容器向量(vector)来存放vector。vector是一个类模板,可以存储任何类型的数据,包括其他vector。vector的存储空间是连续的,因此可以通过指针访问其中的元素。可以使用vector的成员函数push_back向其中添加元素,push_back负责把一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。需要注意的是,一些老式编译器无法识别vector<vector<int>>,只能识别vector<vector<int> >(后两个尖括号间有空格)。
例如,可以使用以下代码来存放vector的vector:
```
#include <vector>
using namespace std;
int main() {
vector<vector<int>> v; // 存放vector的vector
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
v.push_back(v1);
v.push_back(v2);
// 访问v中的元素
cout << v[0][1] << endl; // 输出2
cout << v[1][2] << endl; // 输出6
return 0;
}
```