芦蓬蓬的小叶子 发表于 2021-5-17 17:50:29

关于容器与指针(数组)的问题

有整型数组和容器list(存放整型指针),输入完数组后,将此数组放在list里,然后通过swap函数将数组中的两个不同的元素互换(该操作可执行多次),将变换后的数组放在list里
代码:
//版本一
#include <iostream>
#include <vector>
#include <list>
using namespace std;

list<int*> num;

void swap(int* array, int x1, int x2);
void print(list<int*> num);

int main() {
    int *array = new int;//定义数组
    for(int i = 0; i < 9; i++) {
      cin >> array;
    }
    num.push_back(array);//把数组放入队列里
    print(num);
    cout << endl;
    swap(array, 0, 1);//下标为0的数下标为1的数互换
    num.push_back(array);//把交换后的数组放入队列里
    print(num);
    cout << endl;
    swap(array, 0, 2);//下标为0的数下标为2的数互换
    num.push_back(array);//把交换后的数组放入队列里
    print(num);
    cout << endl;
}

void swap(int* array, int x1, int x2) {
    int temp;
    temp = array;
    array = array;
    array = temp;
}

void print(list<int*> num) {
    list<int*>::iterator it;
    for(it = num.begin(); it != num.end(); it++) {
      for(int i = 0; i < 9; i++) {
            cout << (*it) << " ";
      }
      cout << endl;
    }
}
//版本二
#include <iostream>
#include <vector>
#include <list>
using namespace std;

list<int*> num;

int* swap(int* array, int x1, int x2);
void print(list<int*> num);

int main() {
    int *array = new int;//定义数组
    for(int i = 0; i < 9; i++) {
      cin >> array;
    }
    num.push_back(array);//把数组放入队列里
    print(num);
    cout << endl;
    array = swap(array, 0, 1);//下标为0的数下标为1的数互换
    num.push_back(array);//把交换后的数组放入队列里
    print(num);
    cout << endl;
    array = swap(array, 0, 2);//下标为0的数下标为2的数互换
    num.push_back(array);//把交换后的数组放入队列里
    print(num);
    cout << endl;
}

int* swap(int* array, int x1, int x2) {
    int temp;
    temp = array;
    array = array;
    array = temp;
    return array;
}

void print(list<int*> num) {
    list<int*>::iterator it;
    for(it = num.begin(); it != num.end(); it++) {
      for(int i = 0; i < 9; i++) {
            cout << (*it) << " ";
      }
      cout << endl;
    }
}
//版本三
#include <iostream>
#include <vector>
#include <list>
using namespace std;

list<int*> num;

int* swap(int* array, int x1, int x2);
void print(list<int*> num);

int main() {
    int *array = new int;//定义数组
    for(int i = 0; i < 9; i++) {
      cin >> array;
    }
    num.push_back(array);//把数组放入队列里
    print(num);
    cout << endl;
    array = swap(array, 0, 1);//下标为0的数下标为1的数互换
    num.push_back(array);//把交换后的数组放入队列里
    print(num);
    cout << endl;
    array = swap(array, 0, 2);//下标为0的数下标为2的数互换
    num.push_back(array);//把交换后的数组放入队列里
    print(num);
    cout << endl;
}

int* swap(int* array, int x1, int x2) {
    int temp;
    int* swapped = array;
    temp = swapped;
    swapped = swapped;
    swapped = temp;
    return swapped;
}

void print(list<int*> num) {
    list<int*>::iterator it;
    for(it = num.begin(); it != num.end(); it++) {
      for(int i = 0; i < 9; i++) {
            cout << (*it) << " ";
      }
      cout << endl;
    }
}
样例:
输入:
1 2 3 4 5 6 7 8 9
输出:
1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9
2 1 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9
2 1 3 4 5 6 7 8 9
3 1 2 4 5 6 7 8 9
但实际上一旦数组变了,list中的所有元素也随数组而变化,就是数组是什么样,list中的所有元素就是什么样
输出(三个版本都一样):
1 2 3 4 5 6 7 8 9

2 1 3 4 5 6 7 8 9
2 1 3 4 5 6 7 8 9

3 1 2 4 5 6 7 8 9
3 1 2 4 5 6 7 8 9
3 1 2 4 5 6 7 8 9
解释一下这是怎么回事?

万千只cnm 发表于 2021-5-17 21:05:01

好长不看
页: [1]
查看完整版本: 关于容器与指针(数组)的问题