C++将字符串放入字符串 vector 结构中

标签 c++ string vector

我在将字符串值放入“字符串 vector 结构”时遇到了问题。 最简单的可重现代码如下:

#include <vector>
#include <string>
#include <iostream>

using namespace std;

struct ttt {
  string name;
  unsigned int ID;
  vector<unsigned int> numList;
};

int main() {
  vector<ttt> b;
  b.reserve(3);
  b[0].ID = 1;
  b[0].numList.push_back(3);
  b[0].numList.push_back(4);
  string dd ("Desk");
  b[0].name = dd;
  cout << b[0].ID << b[0].name << b[0].numList[2] << endl;

  return 0;
}

代码可以编译,但无法将“Desk”字符串放入结构元素 b[0].name。现场出现Segmentation Fault。

我也尝试了以下几行,但都失败了。

b[0].name.push_back(dd);
b[0].name += dd;

我的编译器是 GCC g++ 4.7.7 20120313, 我使用了下面的编译命令。

/usr/bin/g++ --std=gnu++0x -Werror -Wall -Wextra -Warray-bounds

我们将不胜感激,真诚地提供任何帮助。

最佳答案

有两个错误:

直接分配 b[0] 而不调用 push_back 或事先在构造函数调用中初始化它。

另一个违规行是

b[0].numList[2]

因为您只调用了两次 push_back(),并且索引是从 0 开始的。

像这样直接初始化 vector 会好得多:

#include <string>
#include <vector>
#include <iostream>

using namespace std;

struct ttt {
  string name;
  unsigned int ID;
  vector<unsigned int> numList;
};

int main() {
  vector<ttt> b{{"Desk", 1, { 3, 4 }}};
  cout << b[0].ID << b[0].name << b[0].numList[1] << endl;
}

Live Example

关于C++将字符串放入字符串 vector 结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273136/

相关文章:

java - 如何打印我的 Java 对象而不得到 "SomeType@2f92e0f4"?

c++ - 合并排序 C++ 1 参数 - vector

java - 使用这个在构造函数中设置变量

C++:将 const 与 STL 迭代器一起使用

Java正则表达式分割第一行和所有剩余行中的文本

javascript - 在javascript中将字符串拆分为单词

c++ - 如何为不同的线程找到并保留可用端口?

c++ - 使用指向内部缓冲区的指针 move 语义

r - 如何为另一个向量中的每个元素获取向量中最接近的元素而没有重复?

c++ - 调整外部 vector 的大小会复制内部 vector 吗?