我是C ++的新手,任何人都能解释一下这是什么意思吗?:
'operator []'不匹配(操作数类型为'std :: initializer_list'和'int')
在这个程序中:
#include <algorithm>
#include <array>
#include <iostream>
using namespace std;
void
print_array(const auto& range)
{
cout << endl;
for (auto& element : range)
cout << element << ' ';
cout << endl;
}
void
sort(auto& range)
{
for (int i = 0; i < range.size() - 1; i++) {
swap(range[i], min_element(range[i + 1], range[range.size() - 1]));
}
}
int
main()
{
auto arr = { 1, 4, 2, 0, 9, 11 };
print_array(arr);
sort(arr);
print_array(arr);
return 0;
}
汇编:
g++ main.cpp -Ofast -std=gnu++17
main.cpp: In instantiation of ‘void sort(auto:2&) [with auto:2 = std::initializer_list<int>]’:
main.cpp:30:11: required from here
main.cpp:20:15: error: no match for ‘operator[]’ (operand types are ‘std::initializer_list<int>’ and ‘int’)
swap(range[i], min_element(range[i + 1], range[range.size() - 1]));
~~~~~^
main.cpp:20:37: error: no match for ‘operator[]’ (operand types are ‘std::initializer_list<int>’ and ‘int’)
swap(range[i], min_element(range[i + 1], range[range.size() - 1]));
~~~~~^
main.cpp:20:51: error: no match for ‘operator[]’ (operand types are ‘std::initializer_list<int>’ and ‘std::initializer_list<int>::size_type {aka long unsigned int}’)
swap(range[i], min_element(range[i + 1], range[range.size() - 1]));
因为我说我是C ++的新手,解释/演示'std :: initializer_list如何工作或提供相关链接或演示如何在这种情况下正确访问范围[index]比获得触发和更有帮助downvoting。
感谢您的阅读。
答案 0 :(得分:-1)
我之前从未使用过数组,所以如果我做了一些愚蠢的话,希望有人会纠正我......
所以关于C ++的一点是你总是需要了解你正在使用什么类型的数据,除非你只是传递它。所以,1)我强烈建议您暂时不要使用auto
。 2)array
对于初学者来说是一个问题。这有点像同时抛弃所有C废话和所有C ++废话。暂时尝试C风格的数组或list
? list
有一个排序功能。
#include <algorithm>
#include <array>
#include <iostream>
using namespace std;
void
print_array(const array<int, 6>& range)
{
cout << endl;
for (auto& element : range)
cout << element << ' ';
cout << endl;
}
void
randomlySwap(array<int, 6>& range)
{
//does not sort..exercise for reader
for (int i = 0; i < range.size() - 1; i++)
{
swap(range[i], range[i+1]);
}
}
int
main()
{
array<int, 6> arr = { 1, 4, 2, 0, 9, 11 };
print_array(arr);
randomlySwap(arr);
print_array(arr);
}