3

C++ 中是否有类似 Javascript 中的拼接的方法/函数?

来自 W3School 的示例:

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

水果的结果将是:香蕉、橙子、柠檬、猕猴桃、芒果

我不能在 C++ 中做同样的事情。我创建了一组框,当我单击它们时,它们应该一个一个消失。我不知道该怎么做,请帮忙。

PS。我正在使用 SDL 库和 Microsoft Visual C++ 2010 Express。

4

2 回答 2

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 << " ";
}

输出:香蕉橙柠檬猕猴桃苹果芒果

这是一个演示。

于 2013-06-18T22:34:25.780 回答
1

在 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 版本相同,但您必须在此处将向量作为第一个参数传递。

于 2013-06-18T22:42:08.453 回答