c++ - 使用String.resize()后,为什么字符串的大小没有变化?
问题描述
我使用以下代码块来制作每个元素的tableOfReservedWords
大小8
:
for(auto s : tableOfReservedWords) {
s.resize(8);
cout<< "S is " << s << " ,Size is "<< s.size() << endl;
}
但是当我运行这个 c++ 程序时,结果是:
S is VAR ,Size is 8
S is INTEGER ,Size is 8
S is BEGIN ,Size is 8
S is END ,Size is 8
S is WHILE ,Size is 8
S is IF ,Size is 8
S is THEN ,Size is 8
S is ELSE ,Size is 8
S is DO ,Size is 8
---------------------
S is VAR ,Size is 3
S is INTEGER ,Size is 7
S is BEGIN ,Size is 5
S is END ,Size is 3
S is WHILE ,Size is 5
S is IF ,Size is 2
S is THEN ,Size is 4
S is ELSE ,Size is 4
S is DO ,Size is 2
现在我对这个结果感到困惑。很明显,我使用了 public 成员函数resize()
,但是当我调用该函数时,该用法不起作用check()
。有没有精通C++的人愿意帮助我?我只是一个完全的新手。提前致谢。
这是我的整个代码:
#include <iostream>
#include <vector>
#include "string"
using namespace std;
vector<string> tableOfReservedWords {"VAR", "INTEGER", "BEGIN", "END", "WHILE", "IF", "THEN", "ELSE", "DO"};
void check() {
for(auto s : tableOfReservedWords) {
//s.resize(8);
cout<< "S is " << s << " ,Size is "<< s.size() << endl;
}
}
int main(int argc, char *argv[]) {
for(auto s : tableOfReservedWords) {
s.resize(8);
cout<< "S is " << s << " ,Size is "<< s.size() << endl;
}
cout<< "---------------------" << endl;
check();
}
解决方案
您的循环main
正在调整字符串副本的大小:
for(auto s : tableOfReservedWords)
s.resize(8); // Resizes 's', which is a copy of the original string
它的工作原理与
std::string word = "VAR";
void check()
{
std::cout << word.size();
}
int main()
{
std::string w = word;
w.resize(8);
check();
}
如果要调整向量中字符串的大小,则需要使用对这些字符串的引用:
for (auto& s : tableOfReservedWords) {
s.resize(8); // Resizes a vector element which we call 's'
// ...
推荐阅读
- flutter - 从顶部推送的页面更改后,不会产生 Flutter Bloc 状态
- c# - EventWaitHandle.Set,等待超时和释放线程数
- hlsl - 将像素着色器 asm 转换为 HLSL
- python - 从 TWS IB 提取基本数据的最后一段代码缺失
- javascript - 如何修复错误:null 不是对象(评估 'bleManager.start')?
- arrays - 如何在 Arduino 代码的函数参数中使用向量(数组)?
- python - 仅将熊猫数据框中的最后一行附加到新数据框中
- javascript - JavaScript 中 GUID/UUID 函数的语法解释
- r - 如何将 mutate_at 与 ifelse 一起使用
- kubernetes - 验证集群 - api/v1/nodes: http: 服务器向 HTTPS 客户端提供 HTTP 响应