C ++将字符串数组[]复制到vector <string> </string>

时间:2011-04-30 04:26:48

标签: c++ arrays string vector

所以我使用成员函数“insert”创建这个类,从字符串数组复制到类内容,这是一个矢量数组。

这个中止错误不断弹出说我要经过Vector结束,但我不明白为什么......

以下是代码:

/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////      Map class   /////////////////////
class Map
{
private:
///////////////////////////////////////////     Map Variables ///////////////
    string _name;
    vector <string> _contents;

public:
    Map(string name){_name = name;
                     _contents.reserve(56);};
    ~Map(){};
    string getName()
    {
    return _name;
    };

    vector <string> getContents()
    {
        return _contents;
    };

///////////////////////////////////////////     Insert  ////////////////////////
            //  string* to an array of 56 strings;
    bool Insert(string* _lines_)
    {

    for (int I = 0; I < 3; I++)
    {
        _contents[I] = _lines_[I];
    }
        return true;
    };


};

如果您需要更多信息,请询问!的谢谢!

6 个答案:

答案 0 :(得分:8)

实际上,您不需要自己复制它们。您可以使用std::vector::assignc-style array转换为std::vector

<强>矢量::分配

将新内容分配给矢量对象,在调用之前删除矢量中包含的所有元素,并将它们替换为参数指定的元素。

示例

string sArray[3] = {"aaa", "bbb", "ccc"};
vector<string> sVector;
sVector.assign(sArray, sArray+3);
        ^ ok, now sVector contains three elements, "aaa", "bbb", "ccc"

更多详情

http://www.cplusplus.com/reference/stl/vector/assign/

答案 1 :(得分:2)

std::copy用作:

#include <algorithm> //for std::copy
#include <iterator>  //for std::back_inserter

std::copy(_lines_, _lines_ + count, std::back_inserter(_contents));

其中count是数组中字符串的总数。如果字符串总数为56,则count应为56,而不是55(如果您希望将所有字符串都复制到_contents)。

答案 2 :(得分:1)

矢量没有大小(只有一些空格reserve ed。)

您必须resize()向量,或使用push_back()添加新元素。

答案 3 :(得分:1)

您应该在使用subscript []运算符添加任何元素之前调整vector <string> _contents的大小。

另外:提供Map类的默认构造函数。

答案 4 :(得分:1)

  1. 您不应该使用下划线前缀标识符
  2. 在初始值设定项列表中分配_nameMap(string name) : _name(name) {
  3. _contents有足够的容量容纳56个元素但没有实际元素。您应该调整它的大小(_contents.resize(56);),在Insert方法(_contents.push_back(_lines_[I]);)中添加元素,或者使用足够的容量构建它(将, _contents(56)添加到初始化列表中)。

答案 5 :(得分:0)

现在更简单了。 (C ++ 11)

string sArray[3] = {"aaa", "bbb", "ccc"};
vector<string> sVector (sArray, sArray + 3);

无需复制,需要分配。