我想编写一个带有一个参数的C++函数,以便可以传入以下任何一种类型:
std::vector<int>
std::array<int>
int array[numElements]
int *ptr = new int[numElements]
etc
Run Code Online (Sandbox Code Playgroud)
模板是实现这一目标的最佳方式吗?
你好,我有一个向量:
vector<int> myCuteVector {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)
现在我想以这样的方式创建一个子向量,它将包含来自 myCuteVector 的 2 个第一个元素,这样在修改子向量元素之后,myCuteVector 的元素也会改变。
伪代码:
vector<int> myCuteVector {1,2,3,4};
vector<int> myCuteSubVector = myCuteVector[0:2];
myCuteSubVector[0] = 5;
printf("%d", myCuteVector[0]) //would print also 5;
Run Code Online (Sandbox Code Playgroud)
有可能实现吗?
我如何遍历数字列表,以及有多少不同的方法可以做到这一点?
我认为会起作用:
#include <cstdlib>
#include <iostream>
#include <list>
using namespace std;
int main()
{
int numbers[] = {2, 4, 6, 8};
int i = 0;
for(i=0; i< numbers.size();i++)
cout << "the current number is " << numbers[i];
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在for循环行上遇到错误:
请求部件
'size'中'numbers',其是非类类型的'int[4]'
我已经知道如何使用new并使用它来创建动态2D矩阵delete.由于C++ 11在这里与许多新的存储器功能,例如unique_ptr,array容器等; 什么是创建2D矩阵的好方法,以便人们不需要使用delete运算符显式释放矩阵?
对于使用STL函数遍历一个C阵列中,std::begin和std::end功能是很方便的等同物.begin()和.end().但是,对于双向C++容器,没有std::rbegin和std::rend等价的反向迭代器.这样的等价物是否存在于其他名称之下,或者是否易于制作?我意识到一个难点是std::begin通常返回一个原始指针,而对于相反的情况,这需要一个包装器,以便++操作可以重载.可能看起来非常不完整
template<class T>
class ReverseArrayIterator {
public:
ReverseArrayIterator(T* ptr) : _ptr(ptr) {}
operator T*() {
return _ptr;
}
void operator++() {
--_ptr;
}
T operator*() {
return *_ptr;
}
bool operator!= (ReverseArrayIterator& rhs) {
return _ptr != rhs._ptr;
}
private:
T* _ptr;
};
template<class T, size_t size>
ReverseArrayIterator<T> rbegin(T (&array)[size]) {
return ReverseArrayIterator<T>(&array[0] + size - 1);
}
template<class T, size_t size>
ReverseArrayIterator<T> rend(T (&array)[size]) { …Run Code Online (Sandbox Code Playgroud) 这是对string_view对象的一个很好的解释.
除了std :: string之外,是否有任何STL容器的'_view'对象?
在我看来,这是一个非常有用的东西.想象一个std::vector_view只存储start迭代器和length字段的类.实际上并不拥有底层数据可以提高效率.
在给定要删除的值的情况下,是否有一种更聪明/更精细的方式来修剪矢量,类似于修剪字符串,例如从
0 0 0 1 2 3 56 0 2 4 0 0
Run Code Online (Sandbox Code Playgroud)
至
1 2 3 56 0 2 4
Run Code Online (Sandbox Code Playgroud)
我找不到类似修剪的功能,查找/擦除是最佳选择吗?
int []arr = new int[4];
arr[^1]; // returns the last element
Run Code Online (Sandbox Code Playgroud)
我正在尝试弄清楚上面的语法。它返回最后一个元素,但为什么呢?
cppreference使用它来描述 std::string_view:
std::basic_string_view(C++17) -对字符串子序列的轻量级非拥有只读视图。
devtut 和 sodocumentation 也 使用它来描述 std::string_view :
C++17 引入了
std::string_view,它只是一个非拥有范围的const chars,可实现为一对指针或一个指针和一个长度。
和这里的各种其他问题和答案参考它,但我找不到它的含义的任何解释。
我需要一个运行时大小已知的容器,而无需调整大小。std::unique_ptr<T[]>会很有用,但没有封装的size成员。同时std::array只适用于编译类型的大小。因此,我需要这些类的某种组合,而没有/最小的开销。
是否有满足我需求的标准类,也许在即将发布的C ++ 20中有?