【发布时间】:2009-04-17 15:06:59
【问题描述】:
在 std::string 中只有 const 成员来获取数据,如 c_str()。但是,我可以通过operator[] 获得对字符串第一个元素的引用,并且可以写入它。
例如,如果我有函数:
void toupper(char *first,char *last_plus_one);
我可以直接写入 vector 以获得指向第一个元素的指针:
vector<char> message // has "Some Message";
toupper(&message[0],&message[0]+message.size());
我可以用 std::string 做同样的事情吗?
string message="Some Message";
toupper(&message[0],&message[0]+message.size());
标准是否保证内存的位置实际上是线性的?即:
&(*(message.begin()+n)) == &message[n]
谢谢。
【问题讨论】:
-
你不能简单地模板化 toupper 函数允许使用字符串迭代器而不是指针吗?
-
如果可以,我不会问。想想我有一个大型的 3rd pary 库,它可能支持 unicode 或其他东西,并且它们的 api 与指针一起工作。因为将其实现为模板的成本很高。
-
@jalf:我手头没有标准,但我相信 std::to_upper 正是您建议的。