c++中list链表如何实现输出指定位置的值

c++中list链表如何实现输出指定位置的值,第1张

你好,list 底层是一个链表, 是用指针实现的,所以不能向数组那样直接得到,你可以自己写一个来遍历, 如;

template<typename T>

T get_value(list<T> ls, int index) {

  typename list<T>::iterator iter;

  iter = lsbegin();

  for(int i = 0; i < index; ++i) {

    iter++;

  }

  return iter;

}

1使用索引(index)来遍历List

2使用Iterator来遍历List。(for-each其实也是利用Iterator)

注意:如果仅仅是遍历,那么可以可以使用索引或Iterator来遍历。但是,如果你在遍历的同时还要删除元素,则最好使用Iterator来遍历和删除元素,这样可以避免ConcurrentModificationException异常。

API是没有这种方法的。

思路一:取到之后把该索引的内容替换掉 然后再次取索引 一直到 -1

思路二:遍历list get(index)取值 与 你要去的值判断 相等则存储起来

判断完后即可得到你要的了。

list计算机专业术语,编辑表, 一览表; 明细表; 目录; 名单。

在计算机领域指序列。在编程语言中List 是类库中的一个类,可以简单视之为双向连结串行,以线性列的方式管理物件集合。

list 的特色是在集合的任何位置增加或删除元素都很快,但是不支持随机存取。list 是类库提供的众多容器(container)之一,除此之外还有vector、set、map、…等等。list 以模板方式实现(即泛型),可以处理任意型别的变量,包括使用者自定义的资料型态

1 kotlin 集合分类

可变集合

不可变集合

11 创建不可变List

12 创建可变集合

22

使用for循环遍历List元素

23

使用函数withIndex()遍历List元素

24

使用forEach遍历List元素

3 常见的List元素 *** 作函数

31 retainAll 取两个集合交集:

32 contains(element: T): Boolean 判断集合中是否有指定元素,有就返回true,否则返回false 。

33 elementAt(index: Int): T 查找下标对应的元素,如果下标越界会抛IndexOutOfBoundsException。

34 elementAtOrElse(index: Int, defaultValue: (Int) -> T): T 查找下标对应元素,如果越界会根据方法返回默认值。

35 elementAtOrNull(index: Int): T 查找下标对应元素,如果越界就返回null

36 first() 返回集合第1个元素,如果是空集,抛出异常javautilNoSuchElementException: List is empty。

37 firstOrNull(): T 返回集合第1个元素,如果是空集, 对空指针异常处理的函数,如果集合为空,则返回null。

38 first(predicate: (T) -> Boolean): T 返回符合条件的第一个元素,没有则抛异常NoSuchElementException 。

39 indexOf(element: T): Int 返回指定元素的下标,没有就返回-1

310 indexOfFirst(predicate: (T) -> Boolean): Int 返回第一个符合条件的元素的下标,没有就返回-1 。

311 indexOfLast(predicate: (T) -> Boolean): Int 返回最后一个符合条件的元素下标,没有就返回-1 。

312 last() 返回集合最后一个元素,空集则抛出异常NoSuchElementException。

313 last(predicate: (T) -> Boolean): T 返回符合条件的最后一个元素,没有就抛NoSuchElementException

314 lastOrNull(predicate: (T) -> Boolean): T 返回符合条件的最后一个元素,没有就返回null

315 lastIndexOf(element: T): Int 返回符合条件的最后一个元素的下标,没有就返回-1

316 single(): T 该集合如果只有1个元素,则返回该元素。为空时会抛出NoSuchElementException 异常,存在多个元素时会抛 IllegalArgumentException异常

4 List集合运算的基本函数

41 any(): Boolean 判断集合元素,如果集合为空,返回false, 集合中存有一个或多个元素时返回true

42 any(predicate: (T) -> Boolean): Boolean 判断集合元素,如果集合为空或者没有符号条件的元素返回false, 集合中存有一个或多个元素符合条件时返回true

43 all(predicate: (T) -> Boolean): Boolean 当且仅当该集合中所有元素都满足条件时,返回true;否则都返回false

44 none(): Boolean 如果集合中没有元素,则返回true,否则返回false。

45 none(predicate: (T) -> Boolean): Boolean 如果集合中没有符合匹配条件的元素,返回true,否则返回false 。

46 count(): Int 返回集合元素个数

47 count(predicate: (T) -> Boolean): Int 返回符合匹配条件的元素的个数

48 max, min 查询最大,最小元素,空集返回null

5 过滤 *** 作函数

51 take(n: Int): List take函数是根据传入的参数挑出该集合前n个元素的子集合

52 map(transform: (T) -> R): List 将集合中的元素通过转换函数transform映射后的结果,存到一个集合中返回。

53 mapNotNull(transform: (T) -> R) 遍历集合每个元素,得到通过函数算子transform映射之后的值,剔除掉这些值中的null,返回一个无null元素的集合。

6 排序 *** 作符

61 reversed(): List 倒序排列集合元素。

62 sorted(): List和sortedDescending(): List 升序排序和降序排序。

63 sortedBy和sortedByDescending 可变集合MutableList的排序 *** 作。根据函数映射的结果进行升序排序和降序排序。

7 生产 *** 作符

71 zip(other: Iterable): List 合并成多维数组

72 plus(elements: Iterable): List 合并集合

你这List里面实际上存放的是对同一个对象的引用,你对它第二次赋值("bbb""222")的时候就把第一次的值覆盖了,所以后来输出的都是第二次赋的值。如果你想你的List存放不同的值,就你这程序来说,最好是再new一个String[]的对象(如obj3)来赋值后放进去,不要重用同一个对象(obj)来赋不同的值,否则你修改其中一个List元素的值的时候另一个也同时被修改了,很容易出错的。

使用ArrayList 进行元素存储

ArryList API有提供方法

indexOf(Object o)

返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1

lastIndexOf(Object o)

返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。

你放的是对象的话 需要重新 equals的方法 这样李泳API的方法直接就可以了

你是否是往list里面新增对象 新增前判断下是否存在重复对象?如果有就取索引?

C#的List为泛型集合,所属命名空间:

SystemCollectionsGeneric     

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

List<T>类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList<T> 泛型接口。 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。

一般用法如下:

1、  List的基础、常用方法,声明:

List<T> mList = new List<T>();  //T为列表中元素类型,现在以string类型作为例子

List<string> mList = new List<string>(); 

List<T> testList =new List<T> (IEnumerable<T> collection);//以一个集合作为参数创建List string[] temArr = { "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu" };

List<string> testList = new List<string>(temArr);

2、添加元素:

List Add(T item);//添加一个元素

ListAdd("John");

List AddRange(IEnumerable<T> collection);//添加一组元素

string[] temArr = { "Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku",  "Locu" };

ListAddRange(temArr);

ListInsert(int index, T item);//在index位置添加一个元素

ListInsert(1, "Hei");

3、 遍历List中元素:

foreach (T element in mList)  T的类型与mList声明时一样

  {

       ConsoleWriteLine(element);

  }

foreach (string s in mList)

{

    ConsoleWriteLine(s);

}

4、删除元素:

List Remove(T item);//删除一个值

mListRemove("Hunter");

List RemoveAt(int index);//删除下标为index的元素

mListRemoveAt(0);

List RemoveRange(int index, int count);//从下标index开始,删除count个元素

mListRemoveRange(3, 2);

11 简单for循环

for(int i=0;i<listsize();i++){

Systemoutprintln(listget(i));

}

tips:不能在for循环的时候删除添加元素,因为删除元素之后,该元素后面的所有元素的下标减1,从而导致这个元素后面的邻居元素不能被遍历到。

12 增强for循环

for(String str:list){

Systemoutprintln(str);

}

tips:也被称为foreach循环,可以在遍历的时候添加、删除元素。使用CopyOnWriteArraylist可以避免报错:concurrentModificationException

13 迭代遍历

Iterator it = listiterator();

while(ithasNext()) {

Systemouprintln(itnext);

}

tips:可以在循环体内删除、添加元素,使用

这些属于基础知识,你可以找到黑马程序员社区,里面Java板块很多内容非常全面。还含有遍历Map以及遍历Set的知识点。

以上就是关于c++中list链表如何实现输出指定位置的值全部的内容,包括:c++中list链表如何实现输出指定位置的值、java中list的遍历有几种方式、如何获取list中所有元素的索引等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10127906.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存