相关疑难解决方法(0)

如何从C风格的数组初始化std :: vector?

std::vector从C风格的数组初始化a的最便宜的方法是什么?

示例:在下面的类中,我有一个vector,但由于外部限制,数据将作为C样式数组传递:

class Foo {
  std::vector<double> w_;
public:
  void set_data(double* w, int len){
   // how to cheaply initialize the std::vector?
}
Run Code Online (Sandbox Code Playgroud)

显然,我可以调用w_.resize()然后循环遍历元素,或者调用std::copy().有没有更好的方法?

c++ arrays stl vector

156
推荐指数
5
解决办法
12万
查看次数

这段代码如何在不使用sizeof()的情况下确定数组大小?

通过一些C面试问题,我找到了一个问题,指出“如何在不使用sizeof运算符的情况下在C中查找数组的大小?”,并提供以下解决方案。它有效,但是我不明白为什么。

#include <stdio.h>

int main() {
    int a[] = {100, 200, 300, 400, 500};
    int size = 0;

    size = *(&a + 1) - a;
    printf("%d\n", size);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如预期的那样,它返回5。

编辑:人们指出了这个答案,但是语法确实有所不同,即索引方法

size = (&arr)[1] - arr;
Run Code Online (Sandbox Code Playgroud)

因此,我认为这两个问题都是有效的,并且对该问题的解决方法略有不同。谢谢大家的大力帮助和详尽的解释!

c arrays size pointer-arithmetic language-lawyer

130
推荐指数
3
解决办法
8004
查看次数

这个"数组大小"模板功能如何工作?

可能的重复:
有人可以解释这个给我数组大小的模板代码吗?
函数模板中的魔术参数......

有人可以解释这段代码的工作原理吗 我知道这段代码的目的是获取数组的长度,但我不知道这段代码是如何工作的:

template<typename T, int size>
int GetArrLength(T(&)[size]){return size;}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ arrays size templates sizeof

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

如何获得char*(char数组)的实际长度和总长度?

对于a char [],我可以很容易地得到它的长度:

char a[] = "aaaaa";
int length = sizeof(a)/sizeof(char); // length=6
Run Code Online (Sandbox Code Playgroud)

但是,我不能这样做以获得a的长度char *:

char *a = new char[10];
int length = sizeof(a)/sizeof(char);
Run Code Online (Sandbox Code Playgroud)

因为,我知道,a这里是一个指针,所以length这里将永远是4(或不同系统中的其他东西).

我的问题是,如何才能获得char *事后的长度?我知道有人可能会挑战我你已经知道它,10因为你刚刚创造了它.我想知道这一点,因为这个获得它的长度的步骤可能会从它的创建中走很长一段路,而且我不想长时间回来检查这个数字.而且,我也想知道它的实际长度.

更具体

  • 我怎样才能得到真实的length=5
  • 我怎么能得到它的总数length=10

对于以下示例:

char *a = new char[10]; 
strcpy(a, "hello");
Run Code Online (Sandbox Code Playgroud)

c c++ arrays char

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

C++矢量文字,或类似的东西

我正在编写一些针对C++ API的代码,它采用向量向量的向量,并且编写如下代码的代码变得乏味:

vector<string> vs1;
vs1.push_back("x");
vs1.push_back("y");
...
vector<string> vs2;
...
vector<vector<string> > vvs1;
vvs1.push_back(vs1);
vvs1.push_back(vs2);
...
vector<vector<string> > vvs2;
...
vector<vector<vector<string> > > vvvs;
vvvs.push_back(vvs1);
vvvs.push_back(vvs2);
...
Run Code Online (Sandbox Code Playgroud)

C++是否有矢量文字语法?即,类似于:

vector<vector<vector<string>>> vvvs = 
    { { {"x","y", ... }, ... }, ... }
Run Code Online (Sandbox Code Playgroud)

有没有非内置的方法来实现这一目标?

c++ vector literals

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

C++ STL:可以使用STL函数透明地使用数组吗?

我假设STL函数只能用于STL数据容器(比如vector),直到我看到这段代码:

#include <functional>
#include <iostream>
#include <numeric>
using namespace std;

int main()
{
    int a[] = {9, 8, 7};
    cerr << "Sum: " << accumulate(&a[0], &a[3], 0, plus<int>()) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它编译并运行时没有任何警告或g ++错误,给出正确的输出和24.

是否允许 C++/STL 标准允许使用具有STL功能的数组?如果是,那么像数组这样的古老结构如何适应模板化迭代器,容器和函数的宏STL计划?此外,程序员应该注意这些用法中是否有任何警告或细节?

c++ arrays stl

22
推荐指数
3
解决办法
8766
查看次数

函数模板中的魔术参数

在以下代码中

#include<iostream>

 template<typename T,size_t N> 
 void cal_size(T (&a)[N])
 { 
     std::cout<<"size of array is: "<<N<<std::endl;
 }

 int main()
 {
     int a[]={1,2,3,4,5,6};
     int b[]={1};

     cal_size(a);
     cal_size(b);
 }
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,两个阵列的大小都被打印出来.但是N如何自动初始化为数组大小的正确值(数组是通过引用传递的)?上面的代码是如何工作的?

c++ templates

21
推荐指数
2
解决办法
2907
查看次数

这个数组大小模板如何工作?

我遇到了这个片段

template <typename T, size_t N>  
char (&ArraySizeHelper(T (&array)[N]))[N];  
#define arraysize(array) (sizeof(ArraySizeHelper(array))) 
Run Code Online (Sandbox Code Playgroud)

在这篇文章http://software.intel.com/en-us/articles/pvs-studio-vs-chromium/

我见过其他模板做同样的事情,比如这个

使用模板获取数组的大小和结束地址

我理解这些,但我一直遇到这个困难.

任何帮助,将不胜感激.

c++ templates metaprogramming

16
推荐指数
2
解决办法
6059
查看次数

在函数声明中,传递固定大小的数组意味着什么?

这感觉真是一个非常愚蠢的问题,但是我有人参加编程课程,请求我在作业上提供一些帮助,我在他们的代码中看到了这一点(请不要对匈牙利符号发表评论):

void read_dictionary( string ar_dictionary[25], int & dictionary_size ) {...
Run Code Online (Sandbox Code Playgroud)

其中,主要是C#程序员(我在大学时学过C和C++),我甚至都不知道你能做到.我总是被告知,并且从那以后你就读过了

void read_dictionary( string ar_dictionary[], int ar_dictionary_size, int & dictionary_size ) {...
Run Code Online (Sandbox Code Playgroud)

我被告知教授给了他们这个并且它有效,那么声明一个固定大小的数组甚至意味着什么呢?C++没有本地方式知道传递给它的数组的大小(即使我认为可能在最新的规范中已经改变)

c++ arrays arguments

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

在C++中从现有数组创建子数组的最佳方法是什么?

好吧,我试图从现有阵列中获取一个子数组,我只是不知道该怎么做.在我的例子中,我有一个非常大的数组,但我想从数组的最后5个元素创建一个数组.

我所谈论的一个例子是:

int array1 = {1,2,3,...99,100};
int array2[5] = array1+95;
Run Code Online (Sandbox Code Playgroud)

我知道这是不正确的,但我在纠正它时遇到了一些麻烦.我想在array1中获取元素96到100并将它们放入array2但我不想复制数组.我只想让array2从96元素开始,这样array1 [96]和array2 [0]将指向同一个位置.

c++ arrays pointers

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