c++11
列表初始化
#include"iostream"
using namepace std;
int main()
{
int x1 = 1;
int x2 = { 2 };
int x3 { 2 };
vector<int> v1 = {1,2,3,4,5,6};
vector<int> v1 {1,2,3,4,5,6};
list<int> lt1 = {1,2,3,4,5,6};
list<int> lt1 {1,2,3,4,5,6};
auto x = {1,2,3,4,5,6};
cout<<typeid(x).name()<<endl; //class std::initializer_list<int>
return 0;
}
decltype
typeid拿到只是类型的字符串,不能再用这个去定义对象什么的
int mian()
{
int x = 10;
//typeid(x).name() y = 20;
decltype(x) y1 = 10.22; //推导类型 并可定义
auto y2 = 10.3;
cout<<y1<<endl; //10
cout<<y2<<endl; //10.3
}
nullptr
array
静态vector
array调用的是一个函数
实际情况:array用的很少,一方面大家用c数组用惯了。另一方面不如vector+resize(在堆上)数组和array在栈上。
forward_list
forward_list
是C++标准库中的一个单向链表容器,它是C++11引入的。与list
容器相比,forward_list
只能单向遍历,不能进行双向遍历和逆序访问。由于只有单向指针,所以forward_list
的内存占用比list
更小。
forward_list
的特点和使用方法如下:
-
单向链表:
forward_list
是一个单向链表容器,每个节点只包含一个指向下一个节点的指针,没有指向前一个节点的指针。 -
插入和删除:
forward_list
支持在链表的任意位置进行插入和删除操作,时间复杂度为O(1)。可以使用insert_after
、emplace_after
、erase_after
等成员函数来操作链表。 -
遍历和访问:可以使用迭代器来遍历
forward_list
,从头节点开始依次访问每个节点。可以使用begin
和end
函数获取链表的起始和结束迭代器,使用++
操作符来移动迭代器。 -
搜索和查找:由于
forward_list
只能单向遍历,所以搜索和查找操作比较低效。可以使用find
函数来查找指定元素,时间复杂度为O(n)。 -
内存占用:由于
forward_list
只包含一个指针,所以它的内存占用比list
更小。但由于没有指向前一个节点的指针,所以无法进行双向遍历和逆序访问。
forward_list
适用于需要频繁进行插入和删除操作的场景,尤其是在内存占用有限的情况下。但由于只能单向遍历,所以在需要频繁搜索和查找的场景下效率较低。在选择使用forward_list
时,需要根据具体需求权衡其优缺点。
对于C++标准库中的forward_list
容器,IDE或编辑器通常不会提供直接的右键引入参数插入功能。这是因为forward_list
容器的特性决定了其插入操作的复杂性,无法简单地通过右键点击来自动插入参数。
forward_list
是一个单向链表容器,插入操作涉及到修改指针和节点的链接关系,而不仅仅是简单的在容器中插入一个元素。因此,如果要在forward_list
的函数或方法中插入参数,通常需要手动进行以下步骤:
- 在函数或方法的定义处,增加一个参数,用于接收要插入的值或元素。
- 在函数或方法的实现中,使用
forward_list
的插入操作(如insert_after
)将新元素插入到合适的位置。
以下是一个示例代码,展示了如何在forward_list
的函数中手动插入参数:
#include <iostream>
#include <forward_list>
void insertElement(std::forward_list<int>& flist, int value) {
// 在函数定义处增加一个参数
flist.insert_after(flist.begin(), value);
}
int main() {
std::forward_list<int> flist = {1, 2, 3, 4, 5};
// 调用函数插入元素
insertElement(flist, 10);
// 输出容器中的元素
for (auto it = flist.begin(); it != flist.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
在上述示例中,我们定义了一个insertElement
函数,该函数接受一个forward_list
的引用和一个要插入的值作为参数。在函数的实现中,我们使用insert_after
函数将新元素插入到链表的第一个位置之后。
需要注意的是,由于forward_list
是单向链表,无法直接在任意位置插入元素。因此,我们只能在特定位置之后插入新元素,这在某些场景下可能需要额外的操作来确定插入的位置。
总结来说,对于forward_list
容器,通常需要手动进行插入操作,而不是依赖于IDE或编辑器提供的右键引入参数插入功能。