sdl — Подобный сплайсинг в C ++, как сплайсинг в Javascript?

Есть ли подобный метод / функция в C ++, как сращивания в Javascript?

Пример из W3School:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi");

Результатом фруктов будет:
Банан, апельсин, лимон, киви, манго

Я не хочу быть в состоянии сделать то же самое в C ++. Я создал массив ящиков, которые должны исчезать один за другим, когда я нажимаю на них. Я не знаю, как это сделать, пожалуйста, помогите.

PS. Я использую библиотеку SDL и Microsoft Visual C ++ 2010 Express.

2

Решение

В C ++ 11:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

template<typename T>
vector<T> splice(vector<T>& v, int start, int howmuch, const vector<T>& ar) {
vector<T> result(begin(v) + start, begin(v) + start + howmuch);
v.erase(begin(v) + start, begin(v) + start + howmuch);
v.insert(begin(v) + start, begin(ar), end(ar));
return result;
}

int main() {
vector<string> fruits = {"Banana", "Orange", "Apple", "Mango"};
auto v = splice(fruits, 2, 1, {"Lemon", "Kiwi"});

cout << "Returned value: " << endl;
for (auto &s: v) {
cout << "\t" << s << endl;
}
cout << endl;

cout << "fruits: " << endl;
for (auto &s: fruits) {
cout << "\t" << s << endl;
}
}

Производит вывод:

Returned value:
Apple

fruits:
Banana
Orange
Lemon
Kiwi
Mango

Это шаблонная версия, поэтому она должна работать не только со строками;
Функция ведет себя так же, как версия JS, но вы должны передать свой вектор в качестве первого параметра здесь.

1

Другие решения

Если вы используете вектор, у вас есть доступ к insert метод:

#include <vector>
#include <iostream>
#include <string>

int main()
{
std::vector<std::string> fruits = {"Banana", "Orange", "Apple", "Mango"};
auto pos = fruits.begin() + 2;

fruits.insert(pos, {"Lemon", "Kiwi"});

for (auto fruit : fruits) std::cout << fruit << " ";
}

Выход: банан апельсин лимон киви яблоко манго

Вот демо.

0

По вопросам рекламы [email protected]