'base'不再是C++中迭代器的成员

Mer*_*old 4 c++ visual-studio-2013

我正在尝试编译一些最初使用Visual Studio 2013在MS Visual Studio C++ 6.0中构建的代码.

在旧代码中,以下构造通常用于各种数据类型(例如,对于字符串):

std::string someString;
someString = ....;
callSomeFunction(someString.begin().base());
Run Code Online (Sandbox Code Playgroud)

因此,为了使函数能够编辑(在此示例中为字符串)原始缓冲区,该方法begin()获取它的迭代器,并且该方法base()返回指向缓冲区的第一个元素的指针.

在代码中,这不仅用于字符串,还用于许多其他数据类型.因此我想知道,如果对标准库进行了更改,那么该base()方法将不再受支持?

它有替代品吗?或者我必须在这里更改代码吗?由于这是经常使用的,我宁愿找到一个更简单的解决方案.

目前我收到如下错误:

错误3错误C2039:'base':不是'std :: _ Vector_iterator >>的成员

Pot*_*ter 7

base容器迭代器没有标准化.它适用于迭代器适配器,如std::reverse_iteratorstd::move_iterator.Microsoft必须将其从实现中删除才能符合ISO C++标准.

要从容器迭代器获取指针,只需使用&* iter.要获取指向支持容器的连续数组的第一个元素的指针,请使用cont.data().