c++ - 使用 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
没有出现在矢量内容中吗?
解决方案
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
推荐阅读
- java - Xpath 包含正则表达式模式
- windows - 创建具有多个屏幕的 MonoGame 应用程序
- python - 如何同时使用两个或多个 .npy 文件训练我的神经网络模型?
- c - C:以数组形式请求输入
- linux - 如何从 Bash 脚本授予用户 SUDO 权限
- qt - 更新自己的 Qt 应用程序
- xml - 如何创建“嵌套列表”并以 HTML 格式显示
- pandas - 在不同列的重复项中保留具有最高值的行
- c# - Microsoft.Web.Administration Ssl 证书未在 iis 管理器中选择
- javascript - 节点 js 套接字挂断和 ECONNRESET 错误 - http 从服务器获取请求下载文件