C++中如何把list容器的元素复制到另一个list容器中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中如何把list容器的元素复制到另一个list容器中相关的知识,希望对你有一定的参考价值。

假如有两个容器list<string> a和list<string> b;
我想把a的第二个至最后的元素复制到b中(即不要a的首元素),应如何做??

使用很简单:启动后将鼠标移到别的软件的LISTBOX,按F5,软件LISTBOX的内容就被复制到它的LISTBOX中了。
‘Module1------------------------------
Option Explicit
Type POINTAPI
x As Long
y As Long
End Type
Public Const LB_GETTEXT = &H189
Public Const LB_GETCOUNT = &H18B
Public Declare Function SendMessageBynum& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Public Declare Function SendMessageByString& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Public Function EnumWindows_CBK(ByVal hwnd As Long, ByVal lParam As Long) As Long
Form1.List1.AddItem Str(hwnd)
EnumWindows_CBK = 1
End Function

’Form1--------------------------------

Option Explicit
Dim win As Long
Dim wintxt As String
Dim i As Integer
Dim MyStr As String
Dim xy As POINTAPI
Dim kq As Boolean
Dim txt As String

Private Sub Form_Load()
kq = False
End Sub

Private Sub List1_Click()
If List1.ListIndex >= 0 Then Text4 = List1.List(List1.ListIndex)
End Sub

Private Sub List2_Click()
If List2.ListIndex >= 0 Then Text5 = List2.List(List2.ListIndex)
End Sub

Private Sub Timer1_Timer()
Dim i As Long
Dim TListCount As Long
Dim TListTexts As String
GetCursorPos xy
win = WindowFromPoint(xy.x, xy.y)
MyStr = String(100, Chr$(0))
List1.Clear
EnumChildWindows win, AddressOf EnumWindows_CBK, 1
Text1.Text = List1.ListCount
For i = 0 To List1.ListCount - 1
GetWindowText Val(List1.List(i)), MyStr, 100
List1.List(i) = List1.List(i) & " " & MyStr
Next
txt = String(100, Chr$(0))
GetWindowText win, txt, 100
Text2.Text = Str(win) & " " & txt

TListCount = SendMessageBynum&(win, LB_GETCOUNT, 0&, 0&)\'得到项目数
Text3 = TListCount
List2.Clear
For i = 0 To TListCount - 1\'将内容添加到列表框
TListTexts = String$(255, 0)
SendMessageByString& win, LB_GETTEXT, i, TListTexts
TListTexts = Left$(TListTexts, InStr(1, TListTexts, Chr$(0)) - 1)
List2.AddItem TListTexts
Next i
End Sub
Private Function MyHotKey(vKeyCode) As Boolean
MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
End Function

Private Sub Timer2_Timer()

If MyHotKey(vbKeyF5) Then
If kq = False Then
Timer1.Enabled = True
kq = True
Else
Timer1.Enabled = False
kq = False
End If
End If
End Sub
参考技术A 把迭代器从第二个开始拷贝就可以了,也可以用通用算法,我这里就直接拷贝了。
#include <iostream>
#include <list>
using namespace std;

int main()

list<int> a;
list<int> b;
int i;
for (i=0; i < 30; ++i, a.push_back(i));
std::list<int>::iterator rit = a.begin();
std::list<int>::iterator rend = a.end();
for(++rit;rit != rend;++rit)
b.push_back(*rit);

rit=b.begin();
rend=b.end();
for(;rit != rend;++rit)
cout << *rit << ", ";
return 0;
本回答被提问者采纳
参考技术B 在list里面建立一个method用来copy
void List::CopyFrom(const List otherList)

for(int a=1;a++;a<length) //这个长度是a的。。

.....//其中过程取决于你用的是普通array list
//还是linked list
//反正一项一项对应的copy就可以了


使用的时候 b.CopyFrom(a); 就可以了!

或者如果你有method能在main()里面读取到a的内容,也可以就在main()里面用loop边读取a的每一个项,边用Insert这个method放到b里面去!

希望能解答你的问题!
参考技术C 用迭代器.. 跟数组的指针一个用法 参考技术D 弄俩数组

把一个list里的元素增加到另一个list中

list1=1,2,3
list2=a,b
想得到 list3=1,2,3,a,b
java的

方式一:

ArrayList B = new ArrayList<> (A);

方式二:

ArrayList B = A.clone();

方式三:

ArrayList B = new ArrayList<String>();B.addAll(A);

方式四:

for(String s: A)B.add(s);

拓展资料

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

参考技术A

ArrayList list1=new ArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
ArrayList list2=new ArrayList();
list2.add("4");
for(int i=0;i<list1.size();i++)

list2.add(list1.get(i));

//这样就可以用list2添加list1的所有元素了!。想把他显示出来可以如下
for(int i=0;i<list2.size();i++)

System.out.println(list2.get(i));

【拓展资料】

list中添加,获取,删除元素;

多次调用Add方法,可以添加多个元素;或一次AddRange方法添加多个元素

例如:

List<int> list = new List<int>();

// 添加5个元素
list.Add(100);
list.Add(200);
list.Add(300);
list.Add(400);
list.Add(500);

int[] a =  1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;
// 添加 10 个元素
list.AddRange(a);

参考技术B

可以使用下面的方法:

for (int i = 0; i < list1.size(); i++)

list3.add(list1.get(i));

for (int i = 0; i < list2.size(); i++)

list3.add(list2.get(i));

如图所示:

参考技术C ArrayList<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
ArrayList<String> list2 = new ArrayList<String>();
list2.add("3");
list2.add("4");
list1.addAll(list2);

本回答被提问者和网友采纳
参考技术D List<string> ary = new List<string>();
List<string> rep = new List<string>();
rep并入ary:
ary.AddRange(rep);

以上是关于C++中如何把list容器的元素复制到另一个list容器中的主要内容,如果未能解决你的问题,请参考以下文章

C++实现LRU缓存——LeetCode146

java List 排序

c++怎么把一个string复制给另一个string型啊

把一个list里的元素增加到另一个list中

把一个list里的元素增加到另一个list中

C++中list的用法总结