
你好,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为泛型集合,所属命名空间:
SystemCollectionsGenericpublic 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中所有元素的索引等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)