【问题标题】:Adding arrays to vector in for loop with random_shuffle使用 random_shuffle 将数组添加到 for 循环中的向量
【发布时间】:2015-05-31 22:08:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ arrays vector


    【解决方案1】:

    你必须分配 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;
    }
    

    【讨论】:

      【解决方案2】:

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

      P_0.push_back(order);
      

      order本身的值没有改变。

      除了使用动态分配的数组,您还可以使用声明为的向量向量

      std::vector<std::vector<int>> P_0;
      

      【讨论】:

        猜你喜欢
        • 2020-10-22
        • 2021-02-18
        • 2015-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多