相关疑难解决方法(0)

C++数组可以在内存边界结束吗?

C++标准(和C就此而言)允许创建(而不是取消引用)指向超过数组末尾的一个元素的指针.这是否意味着永远不会在最后一个元素在内存边界结束的位置分配数组?我理解在实践中,部分/全部实现可能遵循此约定,但以下哪一项是正确的:

  1. 它实际上是假的,并且数组可能在内存边界处结束,或者
  2. C++标准要求在边界之前结束至少一个元素的内存,OR
  3. 既不是1,也不是2,但在实际编译器中仍然如此,因为它使实现更容易.

C的情况有什么不同吗?

更新: 似乎1是正确的答案.请参阅下面的James Kanze的答案,并且还可以看到efence(http://linux.die.net/man/3/efence-感谢Michael Chastain指向它的指针)

c c++ arrays c++11

32
推荐指数
2
解决办法
2010
查看次数

STL矢量擦除通过指针

理解(至少我认为我这样做)指针可以用作随机STL迭代器.

除非我将指针强制转换为迭代器,否则为什么以下代码无法编译?

vector<int> v{1, 2, 3};
v.erase(&v[0]);
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

7
推荐指数
1
解决办法
711
查看次数

指针是双向迭代器?

我偶然发现了让我完全困惑的事情.

std::reverse() 将双向迭代器作为函数的参数,但是当我传递指向函数的指针时,它似乎工作正常并且实际上反转了字符串.

void reverseFour(char* str) {
    reverse(str, str + strlen(str));
}

int main {
    char *str = "hello";
    str += '/0';
    reverseFour(str);
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,这怎么可能?双向迭代器不是指针,对吧?

c++ pointers iterator

1
推荐指数
1
解决办法
231
查看次数

标签 统计

c++ ×3

iterator ×2

arrays ×1

c ×1

c++11 ×1

pointers ×1

stl ×1