使用random_shuffle将数组添加到for循环中的vector中

时间:2015-05-31 22:08:44

标签: c++ arrays vector

我正在尝试将for-array排列添加到for循环中的vector中,但是当我离开循环时,每个vector元素都是相同的。

task_number = 6;
vector<int*> P_0;
int* order = new int[task_number];
for (int k = 0; k < task_number; k++)
            order[k] = k;

for (int i = 0; i < 3; i++)
{
    random_shuffle(order, order+task_number);
    cout << endl;
    P_0.push_back(order);
    for (int j = 0; j < task_number; j++)
        cout << P_0[i][j] << " ";
}
//////////////////////////////////////
cout << endl<<endl;

std::vector<int*>::iterator it;
for (it = P_0.begin(); it != P_0.end(); ++it)
{
    for (int j = 0; j < task_number; j++)
        cout << (*it)[j] << " ";
    cout << endl;
}

输出:

1 3 0 2 5 4
1 4 5 3 2 0
1 3 5 4 0 2

1 3 5 4 0 2
1 3 5 4 0 2
1 3 5 4 0 2

有什么问题?我做错了什么?

2 个答案:

答案 0 :(得分:0)

向量的所有三个元素都保持与动态分配的数组的第一个元素相同的指针

P_0.push_back(order);

这是order本身的价值没有改变。

您可以使用声明为

的向量向量,而不是使用动态分配的数组
std::vector<std::vector<int>> P_0;

答案 1 :(得分:0)

你必须分配k次整数指针。如果您按如下所示更改代码,它将起作用

int task_number = 6;
vector<int*> P_0;


for (int i = 0; i < 3; i++)
{
    int* order = new int[task_number];
    for (int k = 0; k < task_number; k++)
            order[k] = k;
    random_shuffle(order, order+task_number);
    cout << endl;
    P_0.push_back(order);
    for (int j = 0; j < task_number; j++)
        cout << P_0[i][j] << " ";
}
//////////////////////////////////////
cout << endl<<endl;

std::vector<int*>::iterator it;
for (it = P_0.begin(); it != P_0.end(); ++it)
{
    for (int j = 0; j < task_number; j++)
        cout << (*it)[j] << " ";
    cout << endl;
}
相关问题