Làm thế nào để tạo một mảng động các số nguyên trong C ++ bằng cách sử dụng newtừ khóa?
Làm thế nào để tạo một mảng động các số nguyên trong C ++ bằng cách sử dụng newtừ khóa?
Câu trả lời:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
Đừng quên deletemọi mảng mà bạn phân bổ new.
delete, thì mã của bạn sai.
Kể từ C ++ 11, có một lựa chọn an toàn để new[]và delete[]đó là zero-overhead không giống như std::vector:
std::unique_ptr<int[]> array(new int[size]);
Trong C ++ 14:
auto array = std::make_unique<int[]>(size);
Cả hai điều trên đều dựa trên cùng một tệp tiêu đề, #include <memory>
Bạn có thể muốn xem xét việc sử dụng Thư viện Mẫu Chuẩn. Nó đơn giản và dễ sử dụng, ngoài ra bạn không phải lo lắng về việc phân bổ bộ nhớ.
http://www.cplusplus.com/reference/stl/vector/vector/
int size = 5; // declare the size of the vector
vector<int> myvector(size, 0); // create a vector to hold "size" int's
// all initialized to zero
myvector[0] = 1234; // assign values like a c++ array
std::vectorvới hàm tạo thích hợp hoạt động thực sự tốt và nên được chỉ ra như một giải pháp thay thế. Đôi khi mọi người đặt câu hỏi không tốt và đây có thể được coi là một trong những trường hợp đó - nó rất ngắn gọn và không đưa ra bất kỳ lý do nào cho việc thích hơn new.
new[]thay thế std::vector.
deletebất cứ điều gì theo cách thủ công. Ngoài ra, std::vectorlà một mảng động và không làm gì với danh sách được liên kết. Nó chỉ là một lớp bao bọc xung quanh một đoạn bộ nhớ.
newvà deletetriển khai trình bao bọc. Vấn đề là bạn không quản lý tài nguyên và sử dụng nó, bạn làm cái này hay cái khác.
int* array = new int[size];
std::vector::data()thành viên sẽ trả về mảng thô bên dưới khi cần thiết.
operator&thay vì data()lấy một con trỏ từ một vectơ, nhưng đúng là một vectơ cung cấp bảo đảm liên tục cần thiết để tương thích với các hàm mong đợi mảng.
Ngay khi câu hỏi về mảng động, bạn có thể không chỉ muốn tạo mảng với kích thước thay đổi mà còn thay đổi kích thước của nó trong thời gian chạy. Đây là một ví dụ với memcpy, bạn có thể sử dụng memcpy_shoặc std::copycũng được. Tùy thuộc vào trình biên dịch, <memory.h>hoặc <string.h>có thể được yêu cầu. Khi sử dụng các chức năng này, bạn phân bổ vùng bộ nhớ mới, sao chép các giá trị của vùng bộ nhớ gốc vào nó và sau đó giải phóng chúng.
// create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];
// now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];
/*
somehow set values to given arrays
*/
// add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
Bạn có thể sử dụng hằng số 4 thay vì sizeof(int).
cấp phát động một số bộ nhớ bằng cách sử dụng new:
int* array = new int[SIZE];
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
float arr[2095879];
long k,i;
char ch[100];
k=0;
do{
cin>>ch;
arr[k]=atof(ch);
k++;
}while(ch[0]=='0');
cout<<"Array output"<<endl;
for(i=0;i<k;i++){
cout<<arr[i]<<endl;
}
return 0;
}
Đoạn mã trên hoạt động, kích thước mảng float hoặc int tối đa có thể được xác định là với kích thước 2095879 và điều kiện thoát sẽ là số đầu vào bắt đầu khác 0
std::vector<int>. Và một cuốn sách .