字符串上的 C++ push_back() 和 pop_back() 的 Kotlin 是什么?
What is Kotlin for C++ push_back() and pop_back() on a string?
在C++创建和操作可变字符堆栈相当简单。我使用内置的标准数据类型(std::string(,使用它附带的推送和弹出功能,可以直接打印结果。所有这些都不需要创建额外的类或函数。
#include <iostream>
int main()
{
std::string path {};
path.push_back('L');
path.push_back('R');
path.pop_back();
std::cout << path;
}
生产:
L
Kotlin 对于 C++push_back()
和pop_back()
作为一堆字符是什么?
问题不在于如何在 Kotlin 中将这些实现为成员函数。
C++ 外壳代码
String
是不可变的,所以你不会找到一个完全等价的。 虽然StringBuilder
通常被认为是一种不错的字符串缓冲区类型,但deleteCharAt
会复制整个后备数组。
您可以将setLength
用于此目的。请注意,与std::string
一样,这只会修改字符串缓冲区的内部长度:
val string = StringBuilder("Hello")
string.append(", world!")
string.setLength(string.length - 1)
或者,采用功能更强大的方法并使用不可变值:
var string = "Hello"
string += ", world!"
string = string.dropLast(1)
正如其他回答者/评论者已经说过的那样,如果你真正想要的是一个堆栈或deque,请参阅Deque
和ArrayDeque
(鉴于您在问题中没有提到std::stack
或std::deque
,我不认为是这种情况;更不用说一堆字符本质上并不是很有用。
考虑到OP的评论,这应该是一个惯用的解决方案:
enum class Move {
Left, Right, Forward
}
val moves = ArrayDeque<Move>()
// Push a move:
moves.push(Move.Left)
// Pop a move:
val lastMove = moves.pop()
参见 为什么我应该在 Stack 上使用 Deque?来解释 Java 的不幸历史。
我不太确定这是否是你的意思,但 Kotlin 有一个 dropLast(param:要删除的字符数(函数,它返回一个字符串,没有你想要删除的字符数。链接: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/drop-last.html
如果您正在寻找堆栈数据结构,则可以查看堆栈和 Deque 数据结构。 https://chercher.tech/kotlin/deque-kotlin, https://chercher.tech/kotlin/stack-kotlin
- 字符串上的 C++ push_back() 和 pop_back() 的 Kotlin 是什么?
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 什么相当于 Kotlin 上的C++指针?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- Kotlin、NDK和C++的相互作用
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- Kotlin 从文件加载类的集合?
- 列表大小为 1,但 front() 和 back() 不相等
- C 类数组的Kotlin等效
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 在任何编译语言中实现以下语法(用于工厂设计模式)? 最好是 Kotlin,C++
- Performance of C++ std::unordered_map vs Kotlin/Java HashMap
- 如何在 Kotlin/Native 中将常量字符* 转换为 KString?
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- 链表回推操作中需要'back pointer'