小编kim*_*ims的帖子

STL 中迭代器和 v.begin() 方法有什么区别?

#include <iostream>
#include <vector>

using namespace std;

int main(void){
    vector<int> v = {1, 2, 3};
    auto& it = v.begin();

    // 1.
    v.begin() += 1;
    cout << *(v.begin()); // output is 1

    // 2.
    cout << *(v.begin()+1); // output is 2
}
Run Code Online (Sandbox Code Playgroud)

上面的代码显示它v.begin() += 1;没有按我的预期工作。我不知道code1和code2之间的实际区别。v.begin() 是左值还是右值?或无?

插入时而it不是v.begin()两种情况都返回 value 2。为什么会发生这样的事情呢?

c++

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

有没有什么方法可以更有效地使用“删除”而不是一一删除?

我正在尝试创建仅获取 int 参数的函数。因此,当包含其他类型(double、char、bool)时,我通常delete会像下面的代码一样排除它:

#include <iostream>

using namespace std;

int add_int(int x, int y){
    return x + y;
}

int add_int(double, double) = delete;
int add_int(int, double) = delete;
int add_int(double, int) = delete;
int add_int(bool, int) = delete; // need much more code.. very inefficient

int main(void){
    cout << add_int(1, true) << endl; // error should happen
}
Run Code Online (Sandbox Code Playgroud)

但我觉得这样效率太低了。有没有像“仅可能是 int”或“排除 double、char、bool(我的意思是只输入一个参数)”之类的方法?

c++

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

使用动态分配时,()和[]有什么区别?

我认为在 cpp 中执行动态分配时括号“[]”和“()”是相同的,但此代码打印错误。本来,5 大小的数组应该包含索引 0 到 4,不是吗?我的代码有问题吗?我在cppreference.com上搜索过,没有找到。

#include <iostream>

using namespace std;

int main(void){
    int* p1 = new int[5];
    int* p2 = new int(5);
    p1[4] = 1;
    cout << p1[4]; // no error
    p2[4] = 1;
    cout << p2[4]; // error
}
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×3