【问题标题】:How to assign string to vector(both on heap)如何将字符串分配给向量(都在堆上)
【发布时间】:2018-12-18 00:00:51
【问题描述】:

我正在尝试从文件到向量中获取大约 300 万个字符串。我是这样分配的

vector<string> *slownikds = new vector<string>;

当我尝试从这样的文件中推回时:

string *line;   
while (getline(slownik, *line))
    {
            *slownikds->push_back(*line);
    }

它不起作用。如何从文件“slownik”中推回字符串?

【问题讨论】:

  • 通常动态创建向量并没有任何好处。它已经在幕后动态存储了所有数据。与std::string's 相同
  • slownikdsvect?
  • 请注意,无论您是否使用new 创建它们,字符串和向量都将其内容存储在堆中。
  • 另外,您的代码没有将字符串推送到向量中,因为您没有为该指针分配字符串。它现在指向随机空间。
  • 您不太可能需要或想要动态创建向量、字符串或其他容器。

标签: c++ string pointers vector heap-memory


【解决方案1】:

请停止。

std::vector 的创建是为了让您不必自己为容器分配内存。 std::string 在那里,您不必使用 char * 或使用固定大小的缓冲区。

请修正:

std::vector<string> slownikds;
std::string line;   
while (getline(slownik, line)) {
    slownikds.push_back(line);
}

您收到“错误”的原因可能是以下三种情况之一:

  1. 你没有初始化你的*line,所以它指向未初始化的内存或者可能是NULL
  2. 您正试图通过指针成员访问运算符访问成员函数push_back
  3. 东西 foobar

无论如何,像我上面那样使用指针,就是答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-19
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多