共计 2728 个字符,预计需要花费 7 分钟才能阅读完成。
一、插入方法
函数 | 性能 |
---|---|
push_front() | 向 list 容器首个元素前增加新元素 |
push_back() | 向 list 容器最初一个元素后增加新元素 |
emplace_front() | 在容器首个元素前间接生成新的元素 |
emplace_back() | 在容器最初一个元素后间接生成新的元素 |
emplace() | 在容器的指定地位间接生成新的元素 |
insert() | 在指定地位插入新元素 |
splice() | 将其余 list 容器存储的多个元素增加到以后 list 容器的指定地位处 |
1、insert 办法
格局 | 阐明 |
---|---|
iterator insert(pos,elem) | 在迭代器 pos 指定的地位之前插入一个新元素 elem,并返回示意新插入元素地位的迭代器 |
iterator insert(pos,n,elem) | 在迭代器 pos 指定的地位之前插入 n 个元素 elem,并返回示意第一个新插入元素地位的迭代器 |
iterator insert(pos,first,last) | 在迭代器 pos 指定的地位之前,插入其余容器(例如 array、vector、deque 等)中位于 [first,last) 区域的所有元素,并返回示意第一个新插入元素地位的迭代器 |
iterator insert(pos,initlist) | 在迭代器 pos 指定的地位之前,插入初始化列表(用大括号 {} 括起来的多个元素,两头有逗号隔开)中所有的元素,并返回示意第一个新插入元素地位的迭代器 |
2、splice 办法
格局 | 阐明 |
---|---|
void splice (iterator position, list& x); | 单元 2 |
单元 3 | position 为迭代器,用于指明插入地位;x 为另一个 list 容器。此格局的 splice() 办法的性能是,将 x 容器中存储的所有元素全副挪动以后 list 容器中 position 指明的地位处 |
void splice (iterator position, list& x, iterator i); | position 为迭代器,用于指明插入地位;x 为另一个 list 容器;i 也是一个迭代器,用于指向 x 容器中某个元素。此格局的 splice() 办法的性能是将 x 容器中 i 指向的元素挪动到以后容器中 position 指明的地位处。 |
void splice (iterator position, list& x, iterator first, iterator last); | position 为迭代器,用于指明插入地位;x 为另一个 list 容器;first 和 last 都是迭代器,[fist,last) 用于指定 x 容器中的某个区域。此格局的 splice() 办法的性能是将 x 容器 [first, last) 范畴内所有的元素挪动到以后容器 position 指明的地位处。 |
splice() 成员办法挪动元素的形式
将存储该元素的节点从 list 容器底层的链表中摘除,而后再链接到以后 list 容器底层的链表中。当应用 splice() 成员办法将 list1 容器中的元素增加到 list2 容器的同时,该元素会从 list1 容器中删除。
二、实例
这里次要是 splice 办法的实例
1、办法 1
std::list<int> listInt1{16,72,100}, listInt2{9,201,94};
std::list<int>::iterator listIter = ++listInt1.begin();
**listInt1.splice(listIter, listInt2);**
int i = 0;
std::list<int>::iterator listIter1 = listInt1.begin();
std::list<int>::iterator listIter2 = listInt2.begin();
for (; listIter1 != listInt1.end(); listIter1++)
{std::cout << "splice1 listInt1[" << i++ << "]=" << *listIter1 << std::endl;
}
for (; listIter2 != listInt2.end(); listIter2++)
{std::cout << "splice1 listInt2[" << i++ << "]=" << *listIter2 << std::endl;
}
后果如下:
2、办法 2
std::list<int> listInt1{16,72,100}, listInt2{9,201,94};
std::list<int>::iterator listIter = ++listInt1.begin();
**listInt2.splice(listInt2.begin(), listInt1, listIter);**
int i = 0;
std::list<int>::iterator listIter1 = listInt1.begin();
std::list<int>::iterator listIter2 = listInt2.begin();
for (; listIter1 != listInt1.end(); listIter1++)
{std::cout << "splice1 listInt1[" << i++ << "]=" << *listIter1 << std::endl;
}
for (; listIter2 != listInt2.end(); listIter2++)
{std::cout << "splice1 listInt2[" << i++ << "]=" << *listIter2 << std::endl;
}
后果如下:
3、办法 3
std::list<int> listInt1{16,72,100}, listInt2{9,201,94};
std::list<int>::iterator listIter = ++listInt1.begin();
** listInt2.splice(listInt2.begin(), listInt1, listInt1.begin(), listInt1.end());**
int i = 0;
std::list<int>::iterator listIter1 = listInt1.begin();
std::list<int>::iterator listIter2 = listInt2.begin();
for (; listIter1 != listInt1.end(); listIter1++)
{std::cout << "splice1 listInt1[" << i++ << "]=" << *listIter1 << std::endl;
}
for (; listIter2 != listInt2.end(); listIter2++)
{std::cout << "splice1 listInt2[" << i++ << "]=" << *listIter2 << std::endl;
}
后果如下:
正文完