[英]cannot convert ‘<brace-enclosed initializer list>’ to ‘int*’ in initialization
#include <iostream>
using std::cout;
using std::cin;
struct Array {
int *A;
int size;
int length;
};
void display(Array *arr) {
for(int i = 0; i < arr->length; i++) {
cout << arr->A[i] << "\t";
}
cout << "\n";
}
Array* merge(Array *arr, Array *brr) {
Array *crr;
crr->length = 0;
crr->size = arr->length + brr->length;
crr->A = new int[crr->size];
int i, j, k; i=j=k=0;
while(i < arr->length && j < brr->length) {
if (arr->A[i] < brr->A[j]) {
crr->A[k++] = arr->A[i++];
} else {
crr->A[k++] = brr->A[j++];
}
}
for(;i < arr->length; i++) {
crr->A[k++] = arr->A[i];
}
for(;j < brr->length; j++) {
crr->A[k++] = brr->A[j];
}
crr->length = arr->length + brr->length;
return crr;
}
int main() {
Array arr1 = {{ 2, 6, 10, 15, 25}, 10, 5};
Array arr2 = {{ 3, 4, 7, 18, 20}, 10, 5};
Array *arr3;
arr3 = merge(&arr1, &arr2);
display(arr3);
}
編譯這個給我這個錯誤。 什么是正確的方法?
$ g++ -o merge_arrays merge_arrays.cpp
merge_arrays.cpp: In function ‘int main()’:
merge_arrays.cpp:42:42: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int*’ in initialization
42 | Array arr1 = {{ 2, 6, 10, 15, 25}, 10, 5};
| ^
merge_arrays.cpp:43:41: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int*’ in initialization
43 | Array arr2 = {{ 3, 4, 7, 18, 20}, 10, 5};
| ^
我在聲明struct Array
的同一位置對其進行初始化。 這不是推薦的方法嗎? 我閱讀了許多stackoverflow答案,建議我在聲明它們的同一位置初始化數組。 這正是我在這里所做的。 所以有點困惑。 任何幫助將不勝感激。
擁有原始指針,它將是:
Array arr1 = {new int[10]{ 2, 6, 10, 15, 25}, 10, 5};
但您的班級不遵守3/5/0規則和泄漏資源。
但是標准已經提供了std::vector
來處理集合和std::merge
:
void display(const std::vector<int>&v) {
for(int e : v) {
cout << e << "\t";
}
cout << "\n";
}
std::vector<int> merge(const std::vector<int>&v1, const std::vector<int>&v2)
{
std::vector<int> res(v1.size() + v2.size());
std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), res.begin());
return res;
}
int main() {
std::vector arr1 = { 2, 6, 10, 15, 25};
std::vector arr2 = { 3, 4, 7, 18, 20};
auto arr3 = merge(arr1, arr2);
display(arr3);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.