Что такое эквивалентный код C++ этого оператора нарезки Python?

Я пытаюсь перевести следующие операторы Python на C++:

some_array = [11, 22, 33, 44]
first, rest = some_array[0], some_array[1:]

То, что я до сих пор, это:

int array[4] = {11, 22, 33, 44};
vector<int> some_array (array, 4);
int first = some_array.front();
vector<int> rest = some_array;
rest.erase(rest.begin());
  • Как это может быть короче и / или эффективно переписано?
  • Можно ли это написать без использования шаблонов и / или векторов C++?
  • Существует ли онлайн-сервис (или программное обеспечение) для перевода таких нетривиальных фрагментов кода Python в читаемый человеком код C++?

2 ответа

Решение

Это:

vector<int> rest = some_array;
rest.erase(rest.begin());

можно сократить до:

vector<int> rest(some_array.begin() + 1, some_array.end());

Если вы можете использовать C++11, вы можете сократить весь код до:

vector<int> some_array { 11, 22, 33, 44 };
int first = some_array.front();
vector<int> rest (some_array.begin() + 1, some_array.end());

Хотя я сомневаюсь, что это было бы большим преимуществом...

Самый простой способ сделать это

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> arr = {11, 22, 33, 44};
    int first = arr[0];
    vector<int> rest;

    for (int i = 1; i < arr.size(); i++) {
        rest.push_back(arr[i]);
    }

    return 0;
}

Или вы можете сделать это таким же образом,

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> arr = {11, 22, 33, 44};
    int first = arr[0];
    vector<int> rest(arr.begin() + 1, arr.end());

    return 0;
}
Другие вопросы по тегам