首页 > 解决方案 > 使用 push_back 向向量添加非空字符串,向量内容为空。为什么字符串没有添加到向量中?

问题描述

#include <bits/stdc++.h>
#include <string>

using namespace std;

vector<string> func(string mag) {
  vector<string> s1;
  string temp1;
  string temp2;

  temp1[0] = 'a';
  temp1[1] = 'b';
  temp1[2] = 'c';

  temp2 += "xyz";

  s1.push_back(temp1);
  s1.push_back(temp2);
  return s1;
}

int main() {
  string st;
  vector<string> xyz;
  xyz = func(st);

  for (int a = 0; a < xyz.size(); a++)
    cout << xyz[a] << ',';
}

上面代码的输出是,xyz,即使我期待abc,xyz,的。temp1不打印添加到向量中的字符串。

字符串temp1是非空的,打印出来会给出 output abc,但是将它推到向量s1并打印出向量,字符串不会被打印,temp1而 string被添加到其中 as ,被添加到向量并被打印当打印向量的内容时。temp2"xyz"temp2+="xyz"

有人可以向我解释为什么该字符串temp1没有出现在矢量内容中吗?

标签: c++stringvector

解决方案


string temp1;创建一个空字符串。访问它的任何元素都是越界访问,导致未定义的行为。如果您想像这样访问字符串的内容,请在使用之前调整它的大小:

string temp1;
//    VVVVVV
temp1.resize(3); // now it contains 3 elements

temp1[0]='a'; // set first element, ok
temp1[1]='b'; // set second element, ok
temp1[2]='c'; // set third element, ok

推荐阅读