2011-04-20 39 views
49

vì vậy khi bạn khởi tạo một mảng, bạn có thể gán nhiều giá trị để nó ở một chỗ:C++ phân mảng của nhiều giá trị

int array [] = {1,3,34,5,6} 

nhưng những gì nếu mảng đã được khởi tạo và tôi muốn thay thế hoàn toàn các giá trị của các yếu tố trong mảng đó trong một dòng

nên

int array [] = {1,3,34,5,6} 
array [] = {34,2,4,5,6} 

dường như không làm việc ...

có cách nào để làm như vậy không?

Trả lời

41

Có sự khác biệt giữa khởi tạogán. Những gì bạn muốn làm không phải là khởi tạo, nhưng nhiệm vụ. Nhưng việc gán cho mảng không thể thực hiện được trong C++.

Dưới đây là những gì bạn có thể làm:

#include <algorithm> 

int array [] = {1,3,34,5,6}; 
int newarr [] = {34,2,4,5,6}; 
std::copy(newarr, newarr + 5, array); 

Tuy nhiên, trong C++ 0x, bạn có thể làm điều này:

std::vector<int> array = {1,3,34,5,6}; 
array = {34,2,4,5,6}; 

Tất nhiên, nếu bạn chọn để sử dụng std::vector thay vì mảng thô.

+1

Liên kết đến bản demo trực tuyến không làm việc –

+2

'std :: bản sao (std :: bắt đầu (newarr), std :: cuối (newarr), std :: bắt đầu (mảng)); 'sẽ tốt hơn phải không? –

+0

@MattCruikank: Có. Nhưng điều đó là không thể trong C++ 03. – Nawaz

6

Bạn phải thay thế các giá trị từng người một như trong một cho vòng lặp hoặc sao chép một mảng khác hơn như sử dụng memcpy(..) hoặc std::copy

ví dụ

for (int i = 0; i < arrayLength; i++) { 
    array[i] = newValue[i]; 
} 

Hãy cẩn thận để đảm bảo kiểm tra giới hạn thích hợp và bất kỳ kiểm tra nào khác cần thiết để ngăn chặn sự cố vượt quá giới hạn.

1
const static int newvals[] = {34,2,4,5,6}; 

std::copy(newvals, newvals+sizeof(newvals)/sizeof(newvals[0]), array); 
Các vấn đề liên quan