将元素从char向量复制到字符串向量

时间:2013-10-25 00:25:52

标签: c++ vector

我有一个字符向量,我想复制字符串向量中的元素。我希望第二个向量的每个单元格都有第一个 k 元素,形成一个字符串。虽然我没有编译错误,但程序在形成字符串向量时会崩溃。

提前致谢!

vector<string> v2;

for(int i = 0; i <= v1.size(); i++){    //v1 is the char vector

    for(int j = 0; j <= k; j++){
        v2[i] = v2[i] + v1[j];
    }

    cout << v2[i] << endl;
}

3 个答案:

答案 0 :(得分:2)

当您访问v2时,您的向量v2[i]为空:因此,此操作是非法的。你可能想要像

这样的东西
std::vector<std::string> v2;
v2.reserve(v1.size()); // optionally reserve enough elements; may improve performance
for (std::string::const_iterator it(v1.begin()), end(v1.end()); it != end; ++it) {
    v2.push_back(std::string(it, it + std::min(k, std::distance(it, end))));
    std::cout << v2.back() << '\n';
}

答案 1 :(得分:2)

你必须确保你的另一个向量中有足够的元素。

(更新:对v2使用postfix操作将节省内存和运行时间,因为在这种情况下,不必分配临时变量来执行添加操作。)

vector <string> v2(v1.size());
for(int i=0;i<=v1.size();i++){    //v1 is the char vector
    for (int j=0;j<=k;j++){
        v2[i]+=v1[j];
    }
cout<<v2[i]<<endl;
}

答案 2 :(得分:1)

有一个字符串构造函数,它接受一对迭代器 - 用它来获取k个连续字符。然后,开始下一个字符串,最后一个字符串结束(我认为这是你的问题意味着什么?)

vector<string> v2;

auto p1 = v1.begin();
auto const pend = v1.end();
if (v1.size() > k) {
    auto const pendk = pend - k;
    do {
        auto const p2 = p1 + k; // locate k characters
        v2.emplace_back(p1, p2);// make a string from those characters
        p1 = p2;                // the end of this one is the start of the next
    } while (p1 < pendk);
}
if (p1 != pend)             // deal with any leftover (<= k) characters at the end
    v2.emplace_back(p1, pend);