簡體   English   中英

C ++將int數組分配給一個相同大小的空數組

[英]C++ assign array of ints to an empty array of ints same size

我對Java非常熟悉,這是允許的。 然而,看起來它不適用於C ++。 我在嘗試分配valuesToGrab = updatingValues;時收到“無效的數組賦值”。

//these are class attributes
int updatingValues[361] = {0};
int valuesToGrab[361] = {0};

//this is part of a function that is causing an error. 
for (unsigned int i=0; i < 10; i++) {

    //this fills values with 361 ints, and num_values gets set to 361. 
    sick_lms.GetSickScan(values,num_values);

    //values has 361 ints, but a size of 2882, so I copy all the ints to an array
    //of size 361 to "trim" the array.
    for(int z = 0; z < num_values; z++){
        updatingValues[z] = values[z];
    }

    //now I want to assign it to valuesToGrab (another program will be 
    //constantly grabbing this array, and it can't grab it while it's being
    //populated above or there will be issues
    valuesToGrab = updatingValues; // THROWING ERROR
}

我不想迭代更新VALal並將其逐個添加到valuesToGrab,但如果我必須,我會。 有沒有辦法用C ++在一個函數中分配它?

謝謝,

用C ++復制的標准習慣用法是

#include <algorithm>
...
std::copy(values, values+num_values, updatingValues);

確保updatingValues足夠大,否則你將會出現超支,並且會發生不好的事情。

那就是說在C ++中我們通常使用std :: vector來完成這類任務。

#include <vector>
...
std::vector<int> updatingValues=values; //calls vectors copy constructor

我向量執行數組所做的一切(包括C ++ 11中的靜態初始化),但是有一個很好的定義接口。 with iterators,size,empty,resize,push_back等等。

http://en.cppreference.com/w/cpp/algorithm/copy

http://en.cppreference.com/w/cpp/container/vector

編輯值得注意的是,您可以組合矢量和數組。

std::vector<int> vect(my_array, my_array+10);
//or
std::vector<int> another_vector;
...
another_vector.assign(my_array, my_array+10);//delayed population

反之亦然

std::copy(vect.begin(), vect.end(), my_array); //copy vector into array.

在C ++中,用於代替數組的慣用容器是std::vector 使用vector或數組,您可以使用<algorithm>標頭中的std::copy()函數,這是在C ++中復制任何類型容器的首選方法。 vector

std::vector<int> updatingValues, valuesToGrab;

// Ensure the vector has sufficient capacity to accept values.
updatingValues.resize(361);

// Copy values from the array into the vector.
std::copy(values, values + 361, updatingValues.begin());
//        Source begin & end;   Destination begin.

// Copy one vector to another.
valuesToGrab = updatingValues;

使用數組:

std::copy(valuesToGrab, valuesToGrab + 361, updatingValues);

再次使用數組,如果你想要更多的C風格,你可以使用來自<cstdlib>的C標准庫函數memcpy()

memcpy(valuesToGrab, updatingValues, 361 * sizeof(int));
//     Destination;  Source;         Number of bytes.

使用memcpy() (和它的堂兄, memmove() ),你必須小心你要復制的元素的大小; 如果你說361而不是361 * sizeof(int) ,你將復制361個字節,而不是361個int '的字節值 - 一個很大的區別。

首先,我不認為這會做你想要的,因為valuesToGrab = updatingValues; 將覆蓋你的valuesToGrab外循環的每個循環。

假設您確實想要這樣做,並且您不想更改為向量:

std::copy(updatingValues, updatingValues+361, valuesToGrab);

會做的。 您可以像任何std :: algorithm中的std :: container一樣處理普通數組,指針計為隨機訪問迭代器。

重新考慮你的設計,你不應該“修剪”,你可能不需要復制。

請記住,數組是用C和C ++中的指針實現的。

特別是堆棧上的數組可以顯示為指向內存中具有您為數組請求的容量的常量位置的指針。 這個內存在堆棧中。 當您嘗試valuesToGrab = updatingValues ,你可以認為這是試圖的地址復制updatingValues到變量valuesToGrab 不是嘗試深層復制,您似乎正在嘗試。 但是, valuesToGrab指向內存中的常量位置,無法更新。 該標准稍微具體一點,並明確禁止數組的分配,這就是為什么你得到你所看到的特定錯誤。

您將需要使用循環或類似std::copy或C的memcpy來將值從一個數組復制到另一個數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM