Есть ли подобный метод / функция в C ++, как сращивания в Javascript?
Пример из W3School:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi");
Результатом фруктов будет:
Банан, апельсин, лимон, киви, манго
Я не хочу быть в состоянии сделать то же самое в C ++. Я создал массив ящиков, которые должны исчезать один за другим, когда я нажимаю на них. Я не знаю, как это сделать, пожалуйста, помогите.
PS. Я использую библиотеку SDL и Microsoft Visual C ++ 2010 Express.
В 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, но вы должны передать свой вектор в качестве первого параметра здесь.
Если вы используете вектор, у вас есть доступ к 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 << " ";
}
Выход: банан апельсин лимон киви яблоко манго