rexaron

导航

算法笔记0411

1.

在C++中,set 是一种关联容器,用于存储已排序的键值对,其中每个键都是唯一的。在上面的代码片段中,set<int> s; 声明了一个整数类型的set,命名为s,它将自动按照元素值进行排序。
set<int>::iterator it; 声明了一个名为it的迭代器,用于遍历set中的元素。迭代器是用于访问容器元素的通用方法,在C++标准库中广泛使用。
使用这个迭代器,你可以进行如下操作:

  • 遍历set中的所有元素。
  • 添加、删除或查找set中的元素。
  • 检查set是否为空。
    下面是一些基本的操作示例:
// 添加元素
s.insert(10);
s.insert(20);
s.insert(30);
// 遍历set
for (it = s.begin(); it != s.end(); ++it) {
    cout << *it << " ";
}
// 查找元素
it = s.find(20);
if (it != s.end()) {
    cout << "Found: " << *it;
} else {
    cout << "Not found";
}
// 删除元素
s.erase(20);
// 检查set是否为空
if (s.empty()) {
    cout << "Set is empty";
} else {
    cout << "Set is not empty";
}

在这个例子中,set会按照元素的值自动排序,所以当你遍历set时,输出将是排序后的元素。如果你尝试插入一个已经存在的值,set将保持不变,因为set中的元素是唯一的。

2.

在C++中,inlineregister是两个关键字,它们用于提供对编译器的提示,以优化函数调用和变量的存储。

inline 关键字

inline关键字用于声明内联函数。当你在函数声明前加上inline关键字时,你是在建议编译器在调用该函数的地方直接展开函数体,而不是通过普通函数调用的方式。这样可以减少函数调用的开销,特别是对于那些只有几行代码的短小函数。

inline int add(int a, int b) {
    return a + b;
}

在上面的例子中,add函数被声明为内联的。这意味着每次调用add函数时,编译器都会将函数体中的代码直接插入到调用点,而不是生成一个函数调用的指令。

register 关键字

register关键字用于建议编译器将变量存储在CPU的寄存器中,而不是在内存中。这通常用于那些频繁读写的小变量,以减少访问内存的时间。然而,现代编译器非常智能,它们会自动决定哪些变量应该存储在寄存器中,因此register关键字在现代C++编程中已经不那么常用了。

register int i;

在上面的例子中,i被声明为register类型。这只是一个提示,编译器可能会忽略这个提示,根据实际情况决定是否将变量存储在寄存器中。
需要注意的是,register关键字不能用于声明数组和结构体类型,也不能用于带有auto, static, externvolatile关键字的变量声明中。
在现代C++编程中,register关键字的使用已经被废弃,因为编译器优化已经足够好,能够自动做出最优的决策。而inline关键字虽然仍然有用,但是在C++11及其之后的版本中,编译器可以通过函数的定义自动推断出哪些函数应该是内联的,因此inline关键字的使用也变得不那么必要了。

posted on 2024-04-11 11:41  rexrex  阅读(2)  评论(0编辑  收藏  举报