字符串上的 C++ push_back() 和 pop_back() 的 Kotlin 是什么?

What is Kotlin for C++ push_back() and pop_back() on a string?

本文关键字:back Kotlin 是什么 pop C++ 字符串 push      更新时间:2023-10-16

在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,请参阅DequeArrayDeque(鉴于您在问题中没有提到std::stackstd::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