相关疑难解决方法(0)

什么是"跨度",什么时候应该使用?

最近我有建议span<T>在我的代码中使用's,或者在网站上看到了一些使用span's - 应该是某种容器的答案.但是 - 我在C++标准库中找不到类似的东西.

那么这个神秘的是什么span<T>,以及为什么(或什么时候)使用它是一个好主意,如果它是非标准的?

c++ c++-faq cpp-core-guidelines c++20 std-span

202
推荐指数
3
解决办法
4万
查看次数

gsl库中span和array_view的区别是什么?

在最近的几次会议演示中,我听说Bjarne Stroustrup和其他人提到了C++的新编码指南以及支持它们的一些类型.

具体来说,我记得一个例子,span<T>而不是(T* p, int n)作为一个函数的参数(在约32:00进入谈话时); 但我也记得使用的建议array_view<T>.它们是两个替代方案但是相同的概念吗?或者我是否混淆了事情,他们实际上并没有那么相关?

我似乎无法找到任何关于它们应该是什么的权威定义.

c++ array-view cpp-core-guidelines guideline-support-library

85
推荐指数
3
解决办法
2万
查看次数

将矢量复制到STL列表的最佳方法?

使用迭代器迭代向量并将最复制的复制方法复制到列表中.有什么建议?

c++ stl

41
推荐指数
3
解决办法
3万
查看次数

创建一个新的C++子向量?

假设我有一个值为[1,2,3,4,5,6,7,8,9,10]的向量.我想创建一个新的向量,例如,[5,6,7,8].我想这只是用指针创建一个向量的问题,还是我需要push_back所需的所有中间值?

c++ vector

21
推荐指数
1
解决办法
4万
查看次数

用C++切片向量

[1:]在C++中有没有相当于Python 的列表切片与向量?我只想从矢量中获取除第一个元素之外的所有元素.

Python的列表切片运算符:

list1 = [1, 2, 3]
list2 = list1[1:]  

print(list2) # [2, 3]
Run Code Online (Sandbox Code Playgroud)

C++期望的结果:

std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2;
v2 = v1[1:];

std::cout << v2 << std::endl;  //{2, 3}
Run Code Online (Sandbox Code Playgroud)

c++ vector

10
推荐指数
4
解决办法
9678
查看次数

C++将指定的矢量内容复制到另一个矢量

我创建了一个矢量:

std::vector<std::string> mero; // earlier it filled with more than 500 data
Run Code Online (Sandbox Code Playgroud)

之后我想创建另一个向量,它只占用向量的一部分mero.(例如:从第100到第250)

c++ copy vector

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

是否可以将向量的一部分作为向量发送到函数?

我想看看是否可以将部分向量传递给函数,使其显示为函数的法线向量.更重要的是,我希望在O(1),恒定时间内完成.我不想迭代向量来创建一个新的向量.实际上,我还希望在以下示例中将新矢量的大小更改为40.

void func(vector <int> &v){

    //calling index 10  to 50 of v
    func(v[10..50])
}
Run Code Online (Sandbox Code Playgroud)

c++ vector pass-by-reference

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

C++ - 通过指针访问向量元素的安全性

在我的C++项目中,我使用a vector来保存一堆structs,其中包含一些简单游戏的元素(即:tic-tac-toe,coordinates,xvs o等).即:

struct gameMove
{
  int x;
  int y;
  int player;
  int order;
};
Run Code Online (Sandbox Code Playgroud)

每次在单个游戏中,无论何时玩家进行移动(即:放置x或移动o),信息都存储在vector通道中push_back(),以创建"撤消"功能,该功能目前按预期工作.

在我的撤销/重做逻辑的某些部分,我使用的函数遍历vector,找到适当的元素,并直接返回指向该元素的指针.

它是否安全,只要我正确管理vector,访问它,将指向元素的所有指针清空vector,或者存在固有风险?我担心的是,如果扩展我计划做的游戏(即:对我正在进行的国际象棋游戏使用相同的代码),并且vector太大而需要自动重新分配,指针将会变得无效(即:整个列表被移动到一个可以适合所有元素的新的连续块),或者是否有某种类型的智能指针接口vector来完成同样的事情?

谢谢.

c++ vector stdvector type-safety

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

获取最后5个数组对象C++

一个简单的任务,但我不记得C++的语法.

int array[n];
Run Code Online (Sandbox Code Playgroud)

我需要获取数组的最后5个对象.

array.slice(array.length - 5, 1)??
Run Code Online (Sandbox Code Playgroud)

c++ arrays algorithm

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

使用迭代器对向量进行C ++递归初始化会产生不一致的结果

当我遇到不一致的程序行为时,我试图通过定义非常通用的mergesort算法来练习C ++迭代器。我的问题不是如何实现mergesort(我都知道并且也意识到有很多示例答案),而是当使用迭代器创建递归向量时会收到不一致的最终结果。

我知道可以通过for循环将值复制到L和R数组中来解决问题,但是我想了解为什么使用迭代器无法正常工作。这是在带有C ++ 14的CLION上运行。此帖子从向量中提取子向量的最佳方法?没有回答我的问题,因为我正在创建类似于规定方法的向量。

void merge2(vector<int> &arr, int l, int m, int r)
{
    vector<int> L{arr.begin()+l, arr.begin()+m+1};
    vector<int> R{arr.begin()+m+1,arr.begin()+r+1};
    int i = 0, j = 0, k = l;
    int n1 = m - l + 1;
    int n2 =  r - m;
    while (i < (n1) && j < (n2)){
        if (L[i]<=R[i]){ //R[i] is replaced by R[j]
            arr[k] = L[i++];
        }
        else {
            arr[k] = R[j++];
        }
        k++;
    }
    while  (i < n1)
    {
        arr[k] = …
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11 clion

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

从2个向量中提取元素?

我有2个向量,其中一个有vec1 {e1,e2,e3,e4},另一个有vec2 {e2,e4,e5,e7}

如何从上面的向量中有效地获得三个向量,使得1.has元素仅在vec1中可用类似2只有vec2元素和3.with common elements

c++ containers iterator vector

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

提取矢量的一部分

提取部分向量的最佳方法是哪种?如果我有

std::vector<int> v1(9);

for(int i = 0; i < 9; i++)
    v1[i] = i + 1;
Run Code Online (Sandbox Code Playgroud)

我需要一个放入的代码

std::vector<int> v2(2);
Run Code Online (Sandbox Code Playgroud)

v1的第二和第三个元素.我必须做一个循环还是有一种最聪明的方法?

c++ vector

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

使用迭代器从向量中提取子向量

我正在尝试使用带有以下代码的迭代器从 int 的另一个子向量中提取 int 的子向量:

std::vector<int> Original; std::vector<int> NewVec;
NewVec(Original.begin(), Original.begin()+5);

这不起作用,只有当我在相同的提取行中声明 NewVec 时:

std::vector<int> NewVec(Original.begin(), Original.begin()+5);

那么,是否可以使用 NewVec 使其声明在其构造之前?谢谢。

c++ vector

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