不允许使用C ++数组运算符[]?

时间:2017-08-05 00:07:58

标签: c++

我是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。

感谢您的阅读。

1 个答案:

答案 0 :(得分:-1)

我之前从未使用过数组,所以如果我做了一些愚蠢的话,希望有人会纠正我...... 所以关于C ++的一点是你总是需要了解你正在使用什么类型的数据,除非你只是传递它。所以,1)我强烈建议您暂时不要使用auto。 2)array对于初学者来说是一个问题。这有点像同时抛弃所有C废话和所有C ++废话。暂时尝试C风格的数组或listlist有一个排序功能。

#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);
}